【发布时间】:2014-03-27 20:22:22
【问题描述】:
我正在使用 JPA 和 hibernate 作为提供程序。有两个实体:
@Entity
@Table(name = "PROYECTOS")
public class Proyecto {
@Id
private Long id;
...
@OneToMany(mappedBy = "proyecto", cascade = CascadeType.PERSIST, orphanRemoval = true)
private List<Incidencia> incidencias;
...
}
@Entity
@Table(name = "INCIDENCIAS")
public class Incidencia {
@Id
private Long id;
...
@ManyToOne(cascade = CascadeType.PERSIST, optional = false)
@JoinColumn(name = "ID_PROYECTO", nullable = false)
@NotNull
private Proyecto proyecto;
...
public Incidencia(Proyecto proyecto, Usuario usuario, String descripcion,
Date fechaYHora) {
super();
this.proyecto = proyecto;
this.usuario = usuario;
this.descripcion = descripcion;
this.fechaYHora = fechaYHora;
}
...
}
当我执行测试方法并尝试持久化“Incidencia”类时(“Proyecto”之前已持久化):
...
entityManager.persist(proyecto);
entityManager.flush();
...
Incidencia incidencia = new Incidencia(proyectoFind, usuario,
"1ª incidencia del proyecto", new Date());
proyecto.getIncidencias().add(incidencia);
entityManager.persist(proyecto);
entityManager.flush();
...
上次刷新时抛出异常:
... 35 more
Caused by: org.h2.jdbc.JdbcBatchUpdateException: La columna "PROYECTO" no permite valores nulos (NULL)
NULL not allowed for column "PROYECTO"; SQL statement:
insert into INCIDENCIAS (DESCRIPCION, FECHA_Y_HORA, ID_PROYECTO, ID_USUARIO, ID) values (?, ?, ?, ?, ?) [23502-175]
at org.h2.jdbc.JdbcPreparedStatement.executeBatch(JdbcPreparedStatement.java:1167)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 41 more
我确定“proyecto”设置在“Incidencia”中,因为在它的构造函数中:
this.proyecto = proyecto;
所以,我不明白为什么会抛出这个异常。
非常感谢任何帮助。
【问题讨论】:
-
你检查过
proyectoFind有一个非空值吗? -
您必须为您的变量和类使用正确的英文单词。阅读您的代码很痛苦!!!
-
对不起,我在这个问题中没有使用英文单词来表示变量和类。这是我的第一个问题,我还没有处理这个问题。在接下来的问题中,我会尽量使用英语单词。我检查了“proyecto”(我错误地称之为“proyectoFind”)没有空值。非常感谢。
-
你能列出数据库表INCIDENCIAS中的所有列吗?该错误表明名为 PROYECTO 的列存在问题,而不是 ID_PROYECTO。
-
异常说: 引起:org.h2.jdbc.JdbcBatchUpdateException: La columna "PROYECTO" no permite valores nulos (NULL) NULL not allowed for column "PROYECTO"; SQL语句:插入INCIDENCIAS(USUARIO_CREACION,FECHA_CREACION,DESCRIPCION,FECHA_Y_HORA,USUARIO_ULTIMA_MODIFICACION,FECHA_ULTIMA_MODIFICACION,ID_PROYECTO,ID_USUARIO,VERSION,ID)值(?,?,?,?,?,?,?,?,?,?)[ 23502-175]。句子中出现的列与我在课堂上定义的相同。 PROYECTO 列未在类中定义。供您参考,我正在使用内存数据库 H2。
标签: java hibernate jpa one-to-many many-to-one