Hibernate 对@ManyToMany关系进行不必要的删除
我有两个实体:Hibernate 对@ManyToMany关系进行不必要的删除,hibernate,jpa,ejb,many-to-many,cascade,Hibernate,Jpa,Ejb,Many To Many,Cascade,我有两个实体: @Entity public class Entity1 { @Id @Column(name="ID_ENTITY_1") private Integer id; @OneToMany(mappedBy="entity1", cascade={CascadeType.PERSIST}) private List<Entity2> list; @ManyToMany @JoinTable(
@Entity
public class Entity1 {
@Id
@Column(name="ID_ENTITY_1")
private Integer id;
@OneToMany(mappedBy="entity1", cascade={CascadeType.PERSIST})
private List<Entity2> list;
@ManyToMany
@JoinTable(
schema="schema",
name="V_OTHER_RELATIONSHIP",
joinColumns={@JoinColumn(name="ID_ENTITY_1", insertable=false, updatable=false)},
inverseJoinColumns={
@JoinColumn(
name="ID_ENTITY_2",
referencedColumnName="ID_ENTITY_2",
insertable=false, updatable=false
)
}
)
//getters and setters
}
@Entity
public class Entity2 {
@Id
@Column(name="ID_ENTITY_2")
private Integer id;
@ManyToOne
@JoinColumn(name="ID_ENTITY_1)
private Entity1 entity1;
//getters e setters.
}
@实体
公共类实体1{
@身份证
@列(name=“ID\u实体\u 1”)
私有整数id;
@OneToMany(mappedBy=“entity1”,cascade={CascadeType.PERSIST})
私人名单;
@许多
@可接合(
schema=“schema”,
name=“V_其他关系”,
joinColumns={@JoinColumn(name=“ID_ENTITY_1”,insertable=false,updateable=false)},
反向连接柱={
@连接柱(
name=“ID\u实体\u 2”,
referencedColumnName=“ID\u实体\u 2”,
可插入=false,可更新=false
)
}
)
//接球手和接球手
}
@实体
公共类实体2{
@身份证
@列(name=“ID\u实体\u 2”)
私有整数id;
@许多酮
@JoinColumn(name=“ID\u ENTITY\u 1)
私人实体1实体1;
//能手和二传手。
}
请注意,@ManyToMany关系中不存在通过V_OTHER_关系的级联
但是,当我在Entity1上执行一次删除时,首先发生的是V_OTHER_关系中的一次删除,该删除会导致错误,因为它是只读的
帮助我。我不明白,如果数据库中有引用Entity1的内容,您就不能删除它,那么通过联接表建立的这种关系如何工作呢?如果您希望联接表中的条目在引用实体被删除后继续存在,则联接表应该映射为一个实体。对Entity1的引用是一个视图。I do不希望在视图中删除(V_其他_关系)。对,那么它就不是联接表了。因为它不是联接表,并且您希望它存在于Entity1 Entity2关系之外,所以您应该将它映射为一个实体。Entity1 V_其他_关系_实体Entity2我不明白,如果数据库中有引用它的内容,您就不能删除Entity1,那么如何通过联接表有效吗?如果希望联接表中的条目在删除引用实体后继续存在,则应将联接表映射为实体。对Entity1的引用是一个视图。我不希望在视图中删除(V_其他_关系)。对,那么它就不是联接表。因为它不是联接表,并且您希望它存在于Entity1 Entity2关系之外,所以应该将其映射为实体。Entity1 V_其他_关系_实体Entity2