gpt4 book ai didi

java - JPA EntityManager 是否有无状态版本?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:34 26 4
gpt4 key购买 nike

Hibernate 有一个 Stateless Version of its Session :JPA EntityManager 是否存在类似的东西? IE。不使用一级缓存的 EntityManager?

最佳答案

从 JPA 的角度来看:

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

给定的持久性提供者可以实现额外的缓存层。此外,JDBC Driver API 可能被视为用于存储列/表和缓存连接/语句的低级缓存。然而,它对 JPA 是透明的。

两者都是javax.persistence.EntityManagerorg.hibernate.StatelessSession提供类似的 API。

您不能使用 EntityManager 禁用一级缓存,因为这两者是等价的。但是,您可以:

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

关于java - JPA EntityManager 是否有无状态版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27101707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com