我有一个简单的spring / hibernate应用程序,该应用程序由MySQL DB支持。
数据库是字符集utf8mb4
和排序规则utf8mb4_bin
。我有很多数据包含非拉丁字符。
我有一个页面表(id,pagename,text),其中pagename是唯一索引,我使用Hibernate Criteria API查询该表:
Page result = session.createQuery(query.where(
builder.equal(root.get("pagename"), name)
).select(root)).getSingleResult();
对于某些值,我有一个ResultNotFound
异常。尽管有匹配的记录。我可以通过查询来验证这一点:
select count(*) from page where pagename="Tři_oříšky_pro_Popelku"
1 row in set (0.01 sec)
如果我通过PK(而不是英国)来查找Java中的字符串,则字符串比较返回true
session.createSQLQuery(
"select * from page p where p.id = :pid")
.addEntity(Page.class)
.setParameter("pid", 29752).list().get(0).getPageName().equals(name);
我在这里错过了一些非常简单的事情吗?我已经尝试过在休眠配置文件中使用字符集和编码了,而且很卡住!
我正在使用org.hibernate:hibernate-java8:5.2.10.Final
和mysql:mysql-connector-java:6.0.6