hibernate中OneToMany双向关联,不生成连接表,级联增删改配置

One方配置:
	@OneToMany(fetch = FetchType.EAGER) //即时加载
@JoinColumn(name = "ERP_GOODS_PID")// 必须写,否则会生成一个连接表
@OrderBy("id")// 排序,否则每次取出来Set集合元素的顺序都不一样,为什么用Set集合,官方解释是说它的增删改效率最高
@Cascade({CascadeType.ALL,CascadeType.DELETE_ORPHAN}) // 这才是关键,必须使用org.hibernate.annotations.CascadeType. DELETE_ORPHAN 更新的时候,才会根据Set集合的元素,去维护父子关系(不在集合的元素会delete掉,而不是将外键update成null)
public Set getErpGoodsDetails() {
return erpGoodsDetails;
}


--------------------------------------------------------------
Many方配置:
	@ManyToOne
@JoinColumn(name="ERP_GOODS_PID")// 必须写,否则会生成一个多余的外键字段(有点不解),不影响操作,但绝对不是你想要的。
public ErpGoods getErpGoodsParent() {
return erpGoodsParent;
}


这样配置后,你在操作one方所有的增删改查,就都符合我们意图了。但在操作many方的时候,有点小插曲,就是当你删除的时候,会报异常:deleted object would be re-saved by cascade
解决办法可以参考下面这一篇的第二种方法,先删除关联关系,再删除
[url]http://corejava2008.iteye.com/blog/896080[/url]


其他的扩展阅读:[url]http://sin90lzc.iteye.com/blog/1048122[/url]

你可能感兴趣的:(hibernate,java)