使用JPA2 Criteria API查询字符串子集

时间:2011-04-18 13:15:37

标签: java hibernate criteria jpa-2.0 criteria-api

我正在从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应匹配以下内容:CanadaCanC

问题是JPA2不允许我们像这样对本机sql进行编码,而且我不确定如果没有left函数(我认为可能是mysql特定的)我可以实现类似的东西。

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我不确定您的查询究竟是如何工作的,但您不应该使用CriteriaBuilder.substring(Expression,int)而不是LEFT()吗?如果你提供你想要生成的实际SQL,我可能会有更好的想法。