Can't persist emojis with mysql and hibernate

I once had the same problem. I don't know a pretty solution but this had worked for me.

After I created the Session object I changed the connection collation by hand:

s.doReturningWork(new ReturningWork<Object>() {
    @Override
    public Object execute(Connection conn) throws SQLException
    {
        try(Statement stmt = conn.createStatement()) {
            stmt.executeQuery("SET NAMES utf8mb4");
        }

        return null;
    }
});

if you are using hibernate with c3p0, you can use c3p0 config connectionCustomizerClassName whitch you can set to a class doing work with connections c3p0 got.

example:

hibernate.cfg.xml

<property name="hibernate.c3p0.connectionCustomizerClassName">com.hzmoyan.newlyappserver.db.C3p0UseUtf8mb4</property>

C3p0UseUtf8mb4 class

public class C3p0UseUtf8mb4 extends  AbstractConnectionCustomizer{
     @Override
    public void onAcquire(Connection c, String parentDataSourceIdentityToken)
        throws Exception {
        super.onAcquire(c, parentDataSourceIdentityToken);
        try(Statement stmt = c.createStatement()) {
            stmt.executeQuery("SET NAMES utf8mb4");
        }
    }
}

The solution is to use utf8mb4 rather than utf8 in MySQL. The blog post I linked to explains how to do just that.