瞬态和持久对象之间的可连接更新?

时间:2010-11-24 14:53:28

标签: eclipselink jpa-2.0 java-ee-6

我在持久对象(由查询检索)和新创建的瞬态对象(使用 new 创建,尚未保留)之间存在多对多关系。 它们通过@JoinTable关联连接,例如:

@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "adccollectiontype_cn_node_type", joinColumns = {
    @JoinColumn(name = "idadccollectiontype")
}, inverseJoinColumns = {
    @JoinColumn(name = "idcn_node_type")
})

在另一端:

@ManyToMany(mappedBy="cnNodeTypes", cascade=CascadeType.ALL)

注意CascadeType.ALL

如果我只是通过将每个对象添加到另一个对象中来创建这两个对象之间的关联,并在以后持久化(另一个对象,并依赖于级联),则不会更新连接表。

但是,如果我在进行关联之前手动persist瞬态对象,它似乎可以正常工作。

现在我试图找到有关此案例的一些信息,为什么以及如何运作,但我找不到任何解释。也许有人可以启发我,无论我认为是对还是对,以及背后的原因。

1 个答案:

答案 0 :(得分:1)

我不确定是否有足够的信息可以解释它。如果要修改托管实体,则应在调用事务提交或刷新时选择更改。那么,在当前的EntityManager上下文中管理现有实体吗?以下工作如何?

ManagedEntity oe = em.find(ManagedEntity.class, id);
NodeType nt = new NodeType(id);
oe.getCnNodeTypes().add(nt);
nt.getOtherEntityCollection().add(oe);
em.flush();

您还可以尝试在您的托管实体上调用合并,以使其级联到新的实体实例。