有什么方法可以确定是否从数据库中读取了实体?
这个问题与如何知道分离的 JPA 实体是否已被持久化有关?. 但是检查其主键的解决方法不能回答我的问题。它不适用于从导入文件中读取主键的实体。
扩展问题:
JPA 实现如何确定是否要插入或更新实体?
有什么方法可以确定是否从数据库中读取了实体?
这个问题与如何知道分离的 JPA 实体是否已被持久化有关?. 但是检查其主键的解决方法不能回答我的问题。它不适用于从导入文件中读取主键的实体。
扩展问题:
JPA 实现如何确定是否要插入或更新实体?
Hibernate 使用带有(用于乐观锁定)注释的字段的值@Version
(如果存在)来判断实体是瞬态的还是分离的。你也可以这样做。
否则,不行,没有办法。POJO 是 POJO。如果不存在 @Version 字段,Hibernate 将使用主键的值。
要知道一个Entity
实例当前是否由给定EntityManager
实例管理,您有该myEntityManager.contains(myEntity)
方法,它可能会为您解决问题,即使我认为大多数实现都基于主键状态(JB Nizet 完全正确)。
请注意,return false 并不断言实体不存在于数据库中。这只是检查实体是否被管理,它可能来自数据库并被分离或被另一个EntityManager
实例检索。