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<ErpGoodsDetail> 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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值