`
78425665
  • 浏览: 123433 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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
解决办法可以参考下面这一篇的第二种方法,先删除关联关系,再删除
http://corejava2008.iteye.com/blog/896080



其他的扩展阅读:http://sin90lzc.iteye.com/blog/1048122
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics