与Hibernate的一对多关系

时间:2011-10-25 20:55:11

标签: hibernate spring mapping hibernate-mapping

我正在使用Hibernate和Spring并且Hibernate返回此错误:

Caused by: java.sql.BatchUpdateException: Column 'ID_TAREA_FK' cannot be null

我有两个班级

public class Tarea {
 private List<Sesion> sesiones;
}

public class Sesion {
 private Tarea tarea;
}

与他们的吸气剂和二传手。在我的代码中,我不会忘记

t.getSesiones().add(s);
s.setTarea(t);

数据库表是: TAREAS {ID_TAREA,...},SESIONES {ID_SESION,ID_TAREA_FK,...}

Tarea.hbm.xml中代码的pieco是:

<bag name="sesiones" table="SESIONES" inverse="true" cascade="all">
 <key column="ID_TAREA" not-null="true" />
 <one-to-many class="com.jonasurbano.tareas.domain.sesiones.Sesion" />
</bag>

在Sesion.hbm.xml中:

<many-to-one name="tarea" class="com.jonasurbano.tareas.domain.tareas.Tarea" not-null="true">
 <column name="ID_TAREA_FK" />
</many-to-one>

我做错了什么?我已经阅读了Hibernate文档和这篇文章Hibernate One To Many Problem,但它对我不起作用。

解决了这个问题后,我想知道是否有办法避免在Sesion类中引用Tarea,因为我认为这个属性是多余的。

非常感谢!

1 个答案:

答案 0 :(得分:4)

  • 检查数据库约束。可能ID_TAREA_FKnot null约束,请尝试删除此约束,因为Hibernate会首先在所有其他列中使用空值保存标识列。

  • 删除 not-null =“true”

    <key column="ID_TAREA" />
    
  • 在一个字符串中重写映射:

    <many-to-one name="tarea" class="com.jonasurbano.tareas.domain.tareas.Tarea" not-null="true"  column="ID_TAREA_FK"/>
    

如果映射有问题并且没有任何帮助,http://docs.jboss.org/hibernate/core/3.3/reference/en/html/collections.html#collections-bidirectional

,请阅读此内容