【发布时间】:2013-05-14 20:58:12
【问题描述】:
有什么方法可以查出是否从数据库中读取了实体?
此问题与How to know if a detached JPA entity has already been persisted or not? 有关。但是检查其主键的解决方法不能回答我的问题。它不适用于从导入文件中读取主键的实体。
扩展问题:
JPA 实现如何确定是要插入还是更新实体?
【问题讨论】:
有什么方法可以查出是否从数据库中读取了实体?
此问题与How to know if a detached JPA entity has already been persisted or not? 有关。但是检查其主键的解决方法不能回答我的问题。它不适用于从导入文件中读取主键的实体。
扩展问题:
JPA 实现如何确定是要插入还是更新实体?
【问题讨论】:
Hibernate 使用带有 @Version(用于乐观锁定)注释的字段的值(如果存在)来判断实体是瞬态的还是分离的。你也可以这样做。
否则,不,没有办法。 POJO 是 POJO。如果不存在 @Version 字段,Hibernate 将使用主键的值。
【讨论】:
new Car(someId) 时,JPA 绝对无法知道汽车是否存在于数据库中。它所知道的是,由于 ID 应该是自动生成的,如果 someId 不为空,那么该实体已在不久前插入到数据库中,但如果它已被删除,它很可能不再存在.
要知道Entity 实例当前是否由给定的EntityManager 实例管理,你有myEntityManager.contains(myEntity) 方法,它可能对你有用,即使我认为大多数实现都是基于主键的状态(JB Nizet 完全正确)。
请注意,return false 并不断言实体不存在于数据库中。这只是检查实体是否被管理,它可能来自数据库并被另一个EntityManager 实例分离或检索。
【讨论】: