JPA:映射为@ManyToMany @JoinTable的关系的隐式级联?

Kaw*_*awu 4 java many-to-many jpa cascade eclipselink

我有以下映射:

@Entity
@Table(name = "Prequalifications")
public class Prequalification implements Serializable
{
    ...

    @ManyToMany
    @JoinTable(name = "Partnerships", joinColumns = @JoinColumn(name = "prequalification_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "company_id", referencedColumnName = "id"))
    private Set<Company> companies;

    ...
}
Run Code Online (Sandbox Code Playgroud)

@ManyToMany+ @JoinTable映射关系中,是不是隐含的关联(链接)实体(这里Partnerships)被自动持久化,删除等等,即使

默认情况下,关系具有空级联集

?以上引用来自"Pro JPA 2,Mike Keith".

执行

em.merge(prequalification);
Run Code Online (Sandbox Code Playgroud)

在上述实体上确实保留了相关的伙伴关系而没有指定任何级联类型.

我是正确,这隐含的级联被执行?在我看的任何地方都没有提到......

Jam*_*mes 13

连接表中的行将作为拥有实体的一部分插入/删除(如果没有mappedBy的一侧是双向的).因此,如果您持久或删除或更新资格预审,则还将插入或删除连接表行.

目标公司对象不会级联到.所以在remove()上它们不会被删除,如果列表被更新,除非设置了orphanRemovla,否则它们不会被删除.持久性也不应该是级联的,但是当你引用"分离"对象时会发生什么,这在某种程度上是一个灰色区域.从技术上讲,应该抛出一个错误,因为该对象是新的,并且关系不是级联持久的.它也可能尝试插入并获得约束错误.它不应该级联持久化,虽然您的对象模型在技术上处于无效状态,因此发生的情况可能取决于提供者.