强制在数据库中更新 JPA 实体(在已插入之后)

问题描述 投票:0回答:1

假设一个实体带有

Map<String, Object>
。这样的 Map 被序列化为 JSON(根据自定义
AttributeConverter
[此处未列出代码])。像这样:

@Entity
@Table(...)
public class MyEntity {
  @Column(...)
  private Map<String, Object> aMap;
  /* ... */

整个事情进展顺利。 Converter 被调用来插入一个新实体;并加载以前的实体。

现在插入过程变得更加复杂。由于超出我意愿的原因(又名框架),实体被迫(又名

flush()
)插入初始[几乎正确]
Map

在交易结束之前,这个 Map 会发生一些变化(仅在值中,不在键中,这并不重要)。

我希望 JPA 提供者能够以某种方式看到这些更改(也许通过 Map 的哈希码/等于)并更新数据库。但事实上它错过了的变化。

是否可以告诉JPA:嘿,这个实体很脏[我知道它是,别介意你对此的看法],请再次将其持久化到数据库中吗?

注意:

Map
中的某些值是其他实体(这对 JSON 转换器来说没有问题),并且 Map 所经历的更改正是在这些实体中,在它们的 PK 中,但也许 maybe hashcode/equals 不是对这些变化敏感。

jpa jpa-2.1
1个回答
0
投票

尝试分离和合并:

EntityManager em;
MyEntity myEntity;

//myEntity becomes dirty
em.detach(myEntity);
myEntity = em.merge(myEntity);
© www.soinside.com 2019 - 2024. All rights reserved.