我想在许多字段上对托管JPA实体进行简单更新。 首先,我查询我想要更新的实体:
MyEntity managedEntity = entityManager.createQuery(query).getSingleResult();
然后我需要用一个新的" MyEntity"更新这个实体。不受JPA管理的对象:
MyEntity notManagedEntity = new MyEntity();
当然可以从notManagedEntity读取每个字段并将它们设置为managedEntity来进行更新。
但更新托管实体的方法是否更为宽松,无需逐个获取和设置每个字段?
答案 0 :(得分:0)
AFAIK,更改对托管实体的引用并不是一个好主意,因为持久化上下文仍将引用旧实体,因此任何刷新都会触发异常...当处理复杂实体时更为重要集合或ManyToOne引用。
答案 1 :(得分:0)
我建议你阅读这个问题: Copy all values from fields in one class to another through reflection
这看起来像是你问题的答案。然后你必须创建一个你从
获得的entiy的副本MyEntity managedEntity = entityManager.createQuery(query).getSingleResult();
在创建了java对象的副本之后,必须从实体中设置一个新值,并将此新对象再次插入到持久层中。
从desinge perpective看起来有点令人困惑,但如果这是请求,至少从技术角度看它应该有效。