JPA命名查询与标准API?

kos*_*tja 26 java jpa named-query criteria-api

Criteria APINamedQuery之间的决策是否有启发式/最佳实践/规则集?

到目前为止我的想法:
命名查询通常更具可读性.条件查询更灵活.
两者都是预编译的.我倾向于尽可能长时间地使用命名查询,然后改为标准.

但也许通过使用标准API来"灵活"查询的冲动可能暗示了次优设计(即关注点的分离)?

谢谢

Jam*_*mes 34

命名查询更加优化(它们被解析/准备一次).Criteria查询是动态的(它们不是预编译的,尽管某些JPA提供程序(如EclipseLink)维护标准准备缓存).

我只会将标准用于动态查询.

  • 我喜欢只使用Criteria.将Criteria API与实体的元模型结合起来,您可以完全放弃使用String并生成强类型代码,这对于真正有趣的Java极客来说!但是,我发现[this](http://milestonenext.blogspot.se/2013/02/jpql-vs-criteria.html)测试实际上表明Criteria的性能甚至比JPQL还差! (5认同)

JB *_*zet 10

例如,当必须基于变量和多个搜索条件动态生成查询时,条件查询是一个很好的选择.

对于静态查询,JPQL更具可读性,我更喜欢使用它们而不是条件查询.你可能会失去一些安全感,但单元测试会让你更自信.