是否有无状态版本的JPA EntityManager?

Jen*_*der 3 java jpa stateless entitymanager

Hibernate有一个无状态版本的会话:JPA EntityManager是否存在类似的东西?即一个不使用第一级缓存的EntityManager?

wyp*_*prz 6

从JPA的角度来看:

  • javax.persistence.EntityManager代表第一级缓存(持久性上下文,事务缓存)
  • javax.persistence.EntityManagerFactory代表二级缓存(共享缓存)

给定的持久性提供程序可以实现其他缓存层.此外,JDBC驱动程序API可以被视为低级缓存,用于存储列/表和缓存连接/语句.然而它对JPA来说是透明的.

无论javax.persistence.EntityManagerorg.hibernate.StatelessSession提供类似的API.

你无法使用EntityManager禁用第一级缓存,因为这两件事是等价的.但是你可以:

  • 使用createQuery,, 跳过第1级缓存createNamedQuery,createNativeQuery用于查询和批量更新/删除(不更新持久性上下文以反映其结果).此类查询应在其自己的事务中执行,从而使任何缓存的实体(如果有)无效.还应使用事务范围的实体管理器(意味着无状态).
  • 通过<shared-cache-mode>NONE</shared-cache-mode>在persistence.xml或javax.persistence.sharedCache.mode属性中设置来禁用二级缓存


Nei*_*ton 2

不是 JPA API 或规范的一部分。个别实现可能允许禁用 L1 缓存。我用过的 DataNucleus JPA 确实允许这样做