Hibernate:一对多非null属性引用null或transient值

时间:2014-09-24 19:13:09

标签: java hibernate

这里的hbm.xml实现有点奇怪。
父映射

<list name="children" inverse="true" lazy="true" cascade="all">
    <key>
        <column name="parent_id" not-null="true"/>
    </key>
    <list-index column="sequence"/>
    <one-to-many class="Child"/>
</list>

儿童制图

<many-to-one name="parent" class="Parent"  cascade="all">
    <column name="parent_id" not-null="true"/>
</many-to-one>

异常

"not-null property references a null or transient value: Child.parent"

儿童班

public class Child {
  private Parent parent;

  //parent getter and setter
} 
  

使用Hibernate 4.0

1 个答案:

答案 0 :(得分:0)

Child对象传递给session.save()且此Child对象已parent = null时,您收到此异常。

非常常见和推荐的模式是在Parent类中使用这种方便的方法:

<强> Parent.java

public void addChild(Child c) {
    if (children == null) {
        children = new ArrayList();
    }

    children.add( c );
    c.setParent( this );
}

// make setter private
private void setChildren(List<Child> children) {
    this.children = children;
}

私有的setter setChildren将由Hibernate在内部使用。

在构建/修改Parent对象时,您应该使用方法addChild。