1

如果实体被删除或管理,它将被存储(或其哈希)在当前 EntityManger 的持久化上下文中,因此 JPA 知道它的状态。但是 JPA 实现如何知道给定的实体是新的还是分离的呢?检查@ID 是否为空并不总是有效。它是特定于 JPA 提供程序的吗?换句话说,JPA 如何知道它需要javax.persistence.EntityExistsException在合并期间抛出?

4

1 回答 1

2

以下是Hibernate 的做法

  • 如果生成了标识符,则使用标识符的存在
  • 如果不是,并且实体是版本化的(用于乐观锁定),请使用时间戳或版本
  • 如果上述不可行,查询二级缓存或数据库,知道标识符是否已经存在。
于 2012-05-18T20:59:45.570 回答