JPA - 正确更新实体上的更多字段

时间:2018-03-26 13:19:46

标签: java hibernate jpa

我想在许多字段上对托管JPA实体进行简单更新。 首先,我查询我想要更新的实体:

MyEntity managedEntity = entityManager.createQuery(query).getSingleResult();

然后我需要用一个新的" MyEntity"更新这个实体。不受JPA管理的对象:

MyEntity notManagedEntity = new MyEntity();

当然可以从notManagedEntity读取每个字段并将它们设置为managedEntity来进行更新。

但更新托管实体的方法是否更为宽松,无需逐个获取和设置每个字段?

2 个答案:

答案 0 :(得分:0)

AFAIK,更改对托管实体的引用并不是一个好主意,因为持久化上下文仍将引用旧实体,因此任何刷新都会触发异常...当处理复杂实体时更为重要集合或ManyToOne引用。

相关主题:What is the best way to update the entity in JPA

答案 1 :(得分:0)

我建议你阅读这个问题: Copy all values from fields in one class to another through reflection

这看起来像是你问题的答案。然后你必须创建一个你从

获得的entiy的副本
MyEntity managedEntity = entityManager.createQuery(query).getSingleResult();

在创建了java对象的副本之后,必须从实体中设置一个新值,并将此新对象再次插入到持久层中。

从desinge perpective看起来有点令人困惑,但如果这是请求,至少从技术角度看它应该有效。