我正在从Hibernate Criteria API升级到JPA2 Criteria API,并且遇到了以下问题,我似乎无法解决这个问题。
在Hibernate Criteria中,我使用Restrictions.sqlRestriction来检查特定类型的字符串子集:
criteria.add(Restrictions.sqlRestriction("{alias}.location_key = left((?), length({alias}.location_key))", searchObj.getLocationKey(), Hibernate.STRING));
这实际上检查输入字符串的第一个N
个字母是否与N
个字母长的location_key匹配。这就是输入字符串Canada,ON
应匹配以下内容:Canada
或Can
或C
。
问题是JPA2不允许我们像这样对本机sql进行编码,而且我不确定如果没有left
函数(我认为可能是mysql特定的)我可以实现类似的东西。
感谢任何帮助!
答案 0 :(得分:1)
我不确定您的查询究竟是如何工作的,但您不应该使用CriteriaBuilder.substring(Expression,int)而不是LEFT()吗?如果你提供你想要生成的实际SQL,我可能会有更好的想法。