hibernate jpa 一对一映射

这些天做公司的项目,用的是springside3的hibernate3.3的jpa映射给我出了不少的难题,但最终都能圆满解决了,其中最难搞定的就是一对一的映射关系,最初我想使用双向一对一,但是由于主表的主键是自动生成,而从表的主键要和主表的主键保持一致,即主键对主键的一对一,结果发现级联保存的时候老是报从表的id为null,由于要继承IdEntity方便管理所以所有的id字段统一的在IdEntity中映射进来,本人菜鸟改了还几次从表的生成策略想要从表的主键依赖外键生成,均没有成功多以决定换一种方法来映射,经多方查阅资料,在从表用manyToOne模拟oneToOne,即在从表中加入一个对应主表id的字段,然后让从表的id自动生成,就能正确存入,但是问题紧跟着又来了,不管我主表或是从表中声明referencedColumnName=“从表中对应主表的id字段”,都没用,hibernate还是会按照主键对主键的方式去查找,所以这次是能存不能查了,最后,绕了一圈又回来了,在从表中还是使用oneToOne,只不过是多声明了一句@joinCilumn(name=“从表中对应主表的id字段”)就OK了。

主表:

@OneToOne(cascade = { CascadeType.ALL }, mappedBy = "irrBuRegionalism")
@PrimaryKeyJoinColumn(referencedColumnName = "reg_id")
public IrrBuRegionalismSdate getIrrBuRegionalismSdate() {
   return irrBuRegionalismSdate;
}

从表:

@OneToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinColumn(name = "reg_id")
public IrrBuRegionalism getIrrBuRegionalism() {
   return irrBuRegionalism;
}

纠正一点错误,今天测试项目发现又不级联查询从表了,仔细检查了打出来的sql语句,发现还是会用主表的主键来对应从表的主键形成一对一,所以老是查出来的从表对象为空,最后发现问题出在@PrimaryKeyJoinColumn(referencedColumnName = "reg_id")这句话上,改成@JoinColumn(name = "reg_id")和从表一样就OK了。

猜你喜欢

转载自liujianguangaaa.iteye.com/blog/1037472