您的位置:首页 > 其它

hiberante通过中间关联one-to-one更新实体时的奇怪现象

2012-07-26 09:47 281 查看
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,好像没生效..没想通.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: