我有3个表:A,B和C. A与B保持一对多的关系,B与C保持一对一的关系。当我做session.save(objA)时,将在A中创建一行,将在B中创建许多行,引用A的id,并且应在C中为B中的每个条目创建一行,引用B的id。
现在问题是,A和B按预期填充,但在C中,行已填充,但包含ID为B的列填充了空值。
是否存在hbm.xml中给出的映射问题?
B.hbm.xml
<one-to-one name="propertyC" class="com.model.C"
cascade="all" fetch="join">
</one-to-one>
C.hbm.xml
<many-to-one name="propertyB" class="com.model.B"
column="B_ID" unique ="true" fetch="join" update="true" insert="true" cascade="all">
</many-to-one>
B.java
class B{
private Long id;
private C propertyC;
}
C.java
class C{
private Long id;
private Long bId;
private B propertyB;
}
答案 0 :(得分:1)
如果你在B和C之间有一个oneToOne关系,为什么这个被定义为C映射中的manyToOne(而不是 OneToOne )?
此外,如果您有双向关系,则必须定义关系的mappedBy元素:
@Entity
private static class B {
@Id
private Long id;
@OneToOne
private C propertyC;
}
@Entity
class C {
@Id
private Long id;
private Long bId;
@OneToOne (mappedBy="propertyC")
private B propertyB;
}