![](/img/trans.png)
[英]Hibernate: @EmbeddedId, Inheritance and @SecondaryTable
[英]Hibernate @EmbeddedId
这是我的问题
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);
休眠结果:
休眠状态:将值(?,?)插入表(代码1,代码2)中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);
休眠结果:
休眠状态:将值(?,?)插入表(code1,code2)中SQL错误:1400,SQLState:23000 ORA-01400:无法将NULL插入(“ TABLE”。“ A_ID”)
解决了
问题出在这里:
, insertable = false)
因此,hibernate生成不带导致错误的a_id字段的sql
它似乎不是来自复合ID,而是来自A。尝试保存A实例
MyEntity myEntity = new MyEntity();
A a = new A();
a.setId(5);
a= getSession().save(a);
myEntity.setA(a);
IdComposite id = new IdComposite();
id.setCode1("1");
id.setCode2("2");
myEntity.setComId(id);
getSession().save(myEntity);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.