我在表1 - 表2之间以及表2与表3之间存在一对多关系的三个表。
Table1具有两列复合主键 - Col_A& Col_B
表1
为col_a
Col_B
....其他专栏
Tabl2具有复合主键,其中包含三列Col_A,Col_B和Col_C。 Col_A& Col_B值来自Table1,但在数据库模式中没有定义外键关系(这是一个旧的遗留数据库......由于数据问题,我现在无法添加约束)
表2
为col_a
Col_B
Col_C
---其他专栏
Table3具有四列复合主键。同样,表2和表3之间没有外键关系。
表3
Col_A
Col_B
Col_C
Col_D
----其他专栏
我已经按照以下方式定义了我的域对象映射。
ClassOne{
@Id
@EmbeddedId
private TableOneId id;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "classOne")
private Set<ClassTwo> classTwoList = new HashSet<ClassTwo>(0);
}
TableOneId{
//I've omitted the column name annotations for simplicity
private String colA;
private String colB;
}
ClassTwo{
@Id
@EmbeddedId
private TableTwoId id;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "classTwo")
private Set<ClassThree> classTwoList = new HashSet<ClassThree>(0);
@ManyToOne
@JoinColumns({
@JoinColumn(name="COL_A",insertable=false, updatable=false),
@JoinColumn(name="COL_B",insertable=false, updatable=false)
})
private ClassOne classOne;
}
TableTwoId{
private String colA;
private String colB;
private String colC;
}
ClassThree{
@Id
@EmbeddedId
private TableThreeId id;
@ManyToOne
@JoinColumns({
@JoinColumn(name="COL_A",insertable=false, updatable=false),
@JoinColumn(name="COL_B",insertable=false, updatable=false) ,
@JoinColumn(name="COL_C",insertable=false, updatable=false)
})
private ClassTwo classTwo;
}
TableThreeId{
private String colA;
private String colB;
private String colC;
private String colD;
}
使用上面的映射配置,插入到三个表中的工作正常。当我调用session.save(classOne)时,我可以看到记录被插入到所有三个表中。
但是当我调用session.delete(classOne)时,只有Table1和Table2中的条目被删除,而不是Table3中的条目。并且由于没有外键约束,因此DB也不会抛出任何错误。由于此时我无法添加外键约束,我需要对映射进行哪些更改才能删除Table3条目?