Hibernate Mapping问题

时间:2011-08-08 09:42:31

标签: java hibernate-mapping one-to-one

我有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;
    }

1 个答案:

答案 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;
}