【发布时间】:2015-06-28 18:13:55
【问题描述】:
这是我的问题
IdComposite类:
@Embeddable
public class IdComposite implements Serializable{
@Column(name = "code1", nullable = false)
private String code1;
@Column(name = "code2", nullable = false)
private String code2;
// getters, setters, hashCode & equals
}
MyEntity类:
@Entity
@Table(name = "table")
public class MyEntity {
@EmbeddedId
private IdComposite comId;
@ManyToOne(fetch = FetchType.LAZY, cascade = {})
@JoinColumn(name = "a_id", nullable = false, updatable = false, insertable = false)
private A a;
// constructors, getters setters, e t.c.
}
DaoClass片段:
MyEntity myEntity = new MyEntity();
A a = new A();
a.setId(5);
myEntity.setA(a);
IdComposite id = new IdComposite();
id.setCode1("1");
id.setCode2("2");
myEntity.setComId(id);
getSession().save(myEntity);
休眠结果:
Hibernate: 插入表 (code1, code2) 值 (?, ?) SQL 错误: 1400, SQLState: 23000 ORA-01400: 无法将 NULL 插入 “表”。“a_id”)
怎么了?
已编辑:
好的,我已经以这种方式更改了代码:
MyEntity类:
@Entity
@Table(name = "table")
public class MyEntity {
@EmbeddedId
private IdComposite comId;
@Column(name = "a_id", nullable = false, updatable = false, insertable = false)
private Long aId;
// constructors, getters setters, e t.c.
}
DaoClass片段:
MyEntity myEntity = new MyEntity();
Long aId = 5L;
A a = (A) getSession().get(A.class, aId);
if (a == null || a.getId() != 5) { return }
myEntity.setAId(a.getId());
IdComposite id = new IdComposite();
id.setCode1("1");
id.setCode2("2");
myEntity.setComId(id);
getSession().save(myEntity);
休眠结果:
Hibernate:插入表(code1,code2)值(?,?) SQL 错误:1400,SQL 状态:23000 ORA-01400: 无法将 NULL 插入 ("TABLE"."A_ID")
已解决
问题出在这里:
, insertable = false)
所以,hibernate 生成没有导致错误的 a_id 字段的 sql
【问题讨论】:
-
您没有将保存操作级联到 A 类。如果您不想使用级联,则应先保存 A 实体,然后再保存 myEntity