如何确定是否从数据库中读取了JPA实体?

时间:2013-05-20 10:12:03

标签: java jpa

有没有办法找出是否从数据库中读取了实体?

此问题与How to know if a detached JPA entity has already been persisted or not?有关。但检查其主键的解决方法不能回答我的问题。对于从导入文件中读取主键的实体,它不起作用。

扩展问题:

JPA实现如何确定是否要插入或更新实体?

2 个答案:

答案 0 :(得分:4)

Hibernate使用带有@Version注释的字段的值(用于乐观锁定)(如果存在)来判断实体是瞬态还是分离。你也可以这样做。

否则,不,没有办法。 POJO是POJO。如果没有@Version字段,Hibernate将使用主键的值。

答案 1 :(得分:1)

要知道Entity实例当前是否由EntityManager实例管理myEntityManager.contains(myEntity)实例,它可能会为您提供帮助,即使我想的大多数情况都是如此实现基于主键状态(JB Nizet完全正确)。

请注意,return false不会断言数据库中不存在该实体。这只是检查实体是否被管理,它可能来自数据库并被分离或被另一个EntityManager实例检索。