关于JPA的基于CriteriaQuery的查询,我有一个简单的问题要问?我在Java EE示例(http://docs.oracle.com/javaee/6/tutorial/doc/giqsq.html)中注意到
entityManager.getTransaction().begin()
和
entityManager.getTransaction().commit()
未使用。
因此,在进行查询时,这些操作是否真的由 CriteriaQuery 隐式处理?
如果你只使用JPA而不使用EJB,那么你需要像你自己一样控制事务,这意味着写transation().begin(),commit(),等等。但是你使用JPA和EJB,就像oracle的教程一样,你不需要在你的方法中编写transation().begin(),commit()等。
Criteria 不对事务执行任何操作,普通的 JPQL 查询或命名查询也不执行任何操作。事务是单独控制的,您可以执行事务性或非事务性操作(如查询)。显然,Java EE 通常会为您启用事务,而在 Java SE 中,您必须自己放置它们 - 但这与您使用的任何查询机制是分开的。