java“与持久性上下文关联”是什么意思?
在这个文档中,它说
Managed entity instances have a persistent identity and are associated with a persistence context.Detached entity instances have a persistent identify and are not currently associated with a persistence context.
所以我试图理解“关联持久性上下文”是什么意思
# 1 楼答案
持久性上下文是负责将任何连接实体的状态与数据库状态同步的代码。EntityManager类用于与持久性上下文交互。查询通过EntityManager(与持久性上下文交互)执行,并使实体状态与数据库内容保持同步。当实体从持久性上下文分离时(例如,通过调用EntityManager上的detach方法),该实体的状态不再与数据库保持同步
# 2 楼答案
您可以将持久化上下文视为一个容器,该容器能够存储实体,这些实体可以通过使用实体管理器与数据库进行管理和同步。下图描述了JPA类和接口之间的依赖关系:
将实体与持久性上下文关联的过程可以通过执行:
EntityManager.createNamedQuery
和EntityManager.createQuery
方法对于事务范围的容器管理的持久性上下文,需要在事务范围内调用这些方法
持久性标识允许通过其主键跨相同类型的所有实体定位实体,并在刷新或提交持久性上下文时(通过刷新/提交手动或自动)同步到数据库
持久化实体会使其成为受管理的实体(与持久化上下文关联)。这并不意味着实体与数据库同步
将实体与持久性上下文解除关联的过程可以通过执行以下操作来实现:
EntityManager.remove
方法;它们之间的区别在于,分离的实体保留在基础数据库中,因为没有删除实体EntityManager.commit
、EntityManager.rollback
、EntityManager.clear
、EntityManager.close
影响持久性上下文的方法尽管分离的实体仍然分配了持久性标识,但它不再与持久性上下文关联,因此与数据库同步。因此,对分离实体的任何更改都不会被持久化和提交,除非将其合并到持久化上下文中。在这种情况下,实体可能已被另一方覆盖,因此变得过时,因此需要清除/重新分配被合并实体的id