hibernate 通过中间表关联的 one-to-one 关系, table a, a-c, c
A实体
public class A{
...
private C c;
@OneToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER,optional=true)
@JoinTable(name ="a-b",joinColumns =@JoinColumn(name="a.id",nullable=true),
inverseJoinColumns =@JoinColumn(name="c.id",nullable=true))
public C getC() {
return c;
}
....
}
C实体
public class C{
...
private A a;
@OneToOne(mappedby="c",optional=true)
public A getA() {
return a;
}
....
}
更新A实体,update(a) 时,使用 getHibernateTemplate().merge(a)方法,
刚开始报 not-null property references a null or transient value错误
后检查发现是 C实体中mapped的属性 a为null, 需要 c.setA(a) 一下, 再 update(a),更新成功,
但是代码看起来很奇怪, 按道理应该是由A方维护的关系, 为什么hibernate会检查 C中的a 是否为空, 而且注解配置中也写了optional = true,好像没生效..没想通.