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,好像没生效..没想通.
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,好像没生效..没想通.
相关文章推荐
- hibernate注解之实体属性OneToOne 单双向关联(三)
- 关于onetoone 的2张表关联中间表的策略
- 在实体注解OneToMany时,要加上mappedby,避免产生中间表。
- 关于数据库应用编程——将更新的数据保存到数据库中的一种奇怪现象
- Hibernate单向一对多关联(Unidirectional One-To-Many)要点
- Hibernate之one-to-one外键关联映射
- 关于hibernate中双向外键关联one-to-one的property-ref=的问题
- 关于hibernate中双向外键关联one-to-one的property-ref=的问题(转)
- 在面对级联关联(one-to-many......)查询的时候,你是怎么解决hibernate session关闭的?我是这样做的。
- hibernate零配置表自身(OneToMany)关联
- NET RIA SERVICE 关联实体同时更新到数据库
- JPA总结——实体关系映射(一对一@OneToOne)
- JPA关系映射系列二:one-to-one主键关联
- 015 一对多关联映射 双向(one-to-many)
- Hibernate 中annotations(注解开发)的@OneToMany 一对多双向关联映射后,出现的jar包冲突问题
- Hibernate之one-to-one外键关联映射
- Hibernate基础:一对一单/双向,主/外键关联 @OneToOne@JoinColumn
- NHibernate的关联映射(one-to-one,one-to-many,many-to-many)以及cascade分析
- LINQ TO Entity 在数据库发生更改时更新实体数据模型 .edmx 文件