你喜欢JPA 2.0的Criteria api吗?你在框架中使用它吗?

Seb*_*ber 18 java hibernate jpa criteria jpa-2.0

我习惯在Hibernate中使用Criteria API,只是看看JPA 2.0中的Criteria如何工作.

我最喜欢的Hibernate标准是我们必须轻松地与Criterions合作.

JPA Criteria对我来说似乎相当沉重,并不像Hibernate Criteria那样流畅.对我来说,与Hibernate相比的一个主要好处似乎是使用了元模型(Entity_.java类),但是由于你必须维护2个类,或者添加一个注释处理器(尽管很容易),它仍然有点沉重.与maven插件集成)

我已经阅读了一篇关于SpringSource的博客,该博客允许使用"JPA Predicates"降低编写的复杂性,并且有点像Hibernate中的Criterions.

Querydsl项目似乎很有趣.

http://blog.springsource.com/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

只是想知道,对于那些使用JPA2的人来说,你使用的是Criteria API还是对你来说有点太重了?

对于熟悉Hibernate Criteria并且现在使用JPA Criteria的人来说,您最喜欢Dowhich方法,为什么?

您是否考虑使用或使用Querydsl或Spring Specifications over JPA2等框架来构建查询谓词?您认为这些框架是否足够成熟以至于被采用?

Dat*_*eus 8

不,不喜欢它,因为API缺乏可表达性和流畅性.是的QueryDSL在更少的代码中做同样的事情,更自然.为此,我们已经采取了JDO自己的类型安全查询API相同的路线,比较它与JPA标准 https://datanucleus.wordpress.com/2010/11/09/jdo-typesafe-vs-jpa-criteria/


Tim*_*per 8

我只能提供偏见,因为我是Querydsl的维护者,但我认为Querydsl和Spring规范都足够成熟.两者都在JPA 2之上提供了一个薄层,Querydsl为查询构建提供了流畅的DSL,为DAO/Repository构建提供了Spring数据模式.

Querydsl的表现力与HQL/JPQL相当.

以下是一些JPA 2 Criteria查询及其Querydsl版本:http://source.mysema.com/forum/mvnforum/viewthread_thread,49

我们在论坛中提供快速错误修复周期和响应支持.Querydsl团队与Spring,DataNucleus和其他各方合作,改进了Java中类型安全查询的状态.

  • 顺便说一句,Spring不是规范。 (2认同)

yma*_*ros 6

我密切使用JPA标准构建器.我使用元模型,类型安全的变体,但这不是唯一的选择.如果要将JPA与其他框架进行比较,请不要计算需要生成元模型类的事实.对于相同的功能,您不会仅为了附加的好处.不过,我不会回到任何非类型安全的方法.

当你习惯它,它使用起来非常简单,而且功能强大.

一个额外的好处:它是标准的.如:来自不同组织的多位专家就此达成一致.规范的质量是确定的,并且它仍在不断发展.并且您获得了多个实现(实际上,其中至少有两个在最流行的应用程序服务器中使用).如果你采用一个随机框架,你可能不会得到它,这可能是也可能不是时间的证据.

JPA2的一些例子:

Root<Person> personRoot = query.from(Person.class);
Path firstNamePath = personRoot.get(Person_.firstName);
Predicate firstNamePredicate = criteriaBuilder.equal(firstNamePath, "Roger");
query.where(firstNamePredicate);
Run Code Online (Sandbox Code Playgroud)

你可以将所有这些压缩到一行,但我大多选择不这样做以获得100%清晰的代码和每行1个语句.