使用JPA2.0(通过Hibernate 4),我可以使用EntityManager.find(java.lang.Class entityClass,java.lang.Object primaryKey)在数据库中查询查询条件是主键的记录。但是,如果查询条件不是主键(例如,选择城市值为'london'的所有记录),是否必须创建TypedQuery并显式提供SQL语句?我应该采用哪种最佳做法?
答案 0 :(得分:0)
JPA Criteria API为您提供了构建自己的动态查询(使用jpql或sql)所不具备的编译时安全级别。特别是当许多条件开始蔓延(可选字段,条件子查询......)时,很容易出错。
Criteria API编写起来可能更复杂(特别是对于简单查询),您需要围绕条件API创建一些管道代码,使其成为真正动态且易于使用的语言。它并没有真正提供开箱即用。
有些人喜欢使用Criteria API,而有些人更喜欢使用命名查询/ JPQL。