2013-02-04 43 views
0

使用JPA2.0(通过Hibernate 4),我可以通过使用EntityManager.find(java.lang.Class entityClass,java)查询数据库中的查询条件是主键的记录。 lang.Object primaryKey)。但是,如果查询条件不是主键(例如,选择城市值为'london'的所有记录),是否必须创建TypedQuery并显式提供SQL语句?我应该采用什么最佳做法?不使用主键的JPA查询

+0

建议您阅读TypedQuery以及传递给它的查询是什么。这不是SQL,更像是JPQL – DataNucleus

+0

我明白,但我正确地认为我必须使用TypedQuery,没有其他方法吗?我很乐意这样做,我只是想确保我最大限度地利用Hibernate/JPA并采用最佳实践,无论可能如何。 –

回答

0

JPA Criteria API为您提供编译时安全,你不会构建自己的动态查询(使用JPQL或SQL)得到的水平。尤其是当许多条件开始蔓延(可选字段,条件子查询......)时,它可能变得非常容易出错。

的标准API可以更复杂的写(尤其是对于简单的查询),你需要创建一个围绕标准的API一些管道代码,使之成为真正的动态和易于使用的语言。它并没有真正提供开箱即用。

有些人喜欢使用Criteria API,而另一些人喜欢命名查询/ JPQL。

+0

这正是我需要的,谢谢。我将使用CriteriaQuery方法。 –