记一次hibernate一对多问题的解决
2015-04-09 00:00
113 查看
摘要: 记一次hibernate一对多问题的解决
最初的配置如下:
同事配置了又向一对多的关系,因为这个表的数据要传给客户端,之间通过json,使用了com.fasterxml.jackson这个jar包,在解析时因为没有忽略对OrderGoodsPic多对一的转换,导致转换时会进入死循环。
后改成以下配置:
改成了单向一对多。
这时虽然不会死循环,但由于配置了FetchType.EAGER,导致hibernate在取数据时使用了left outter join把所有数据一起取出来,这样就使得查出来的数据实际上很多是重复的,比如一个单子对应有多个图片的话,就会查出多个重复的数据,网上找了一下,基本上没很好的解决方案好象。
所以最好参照网上的方案,把延迟加载属性加上fetch=FetchType.LAZY,然后在加载order记录时再手工的写代码获取图片的数据,使得hibernate会先把这些数据加载出来,如下,写了一个方法让其它方法再需要强制一对多的数据时调用:
最初的配置如下:
public class Order extends BaseEntity { ... @OneToMany(cascade=CascadeType.ALL,mappedBy="order", fetch = FetchType.EAGER) public Set<OrderGoodsPic> getOrderGoodPics() { return orderGoodPics; } } public class OrderGoodsPic extends BaseEntity { @ManyToOne(cascade={CascadeType.ALL}) @JoinColumn(name="order_id") public Order getOrder() { return order; } }
同事配置了又向一对多的关系,因为这个表的数据要传给客户端,之间通过json,使用了com.fasterxml.jackson这个jar包,在解析时因为没有忽略对OrderGoodsPic多对一的转换,导致转换时会进入死循环。
后改成以下配置:
public class Order extends BaseEntity { 。。。 @OneToMany(cascade=CascadeType.REMOVE,fetch=FetchType.EAGER) @JoinColumn(name="order_id") public Set<OrderGoodsPic> getOrderGoodPics() { return orderGoodPics; } 。。。 } public class OrderGoodsPic extends BaseEntity { ... @Column(name="order_id", length=32) public String getOrderId() { return this.orderId; } .... }
改成了单向一对多。
这时虽然不会死循环,但由于配置了FetchType.EAGER,导致hibernate在取数据时使用了left outter join把所有数据一起取出来,这样就使得查出来的数据实际上很多是重复的,比如一个单子对应有多个图片的话,就会查出多个重复的数据,网上找了一下,基本上没很好的解决方案好象。
所以最好参照网上的方案,把延迟加载属性加上fetch=FetchType.LAZY,然后在加载order记录时再手工的写代码获取图片的数据,使得hibernate会先把这些数据加载出来,如下,写了一个方法让其它方法再需要强制一对多的数据时调用:
public void initializeGoodPics(Order order) { order.getOrderGoodPics(); }
相关文章推荐
- [笔记]Spring Data Jpa + Hibernate 一对多查询优化(问题未解决)
- 一次解决session无法完全删除问题的全过程
- 在一般应用程序中使用Hibernate需要解决的问题
- getHibernateTemplate().save() 未保存到数据库问题之解决
- weblogic下使用hibernate3的异常问题及解决
- hibernate+struts+mysql有关utf8乱码问题的解决。
- 一次诊断和解决CPU利用率高的问题分析
- 用Hibernate解决Parent/Child问题
- 关于Hibernate的DetachedCriteria查询的addOrder问题的解决办法
- hibernate的中文问题的解决方法的补充
- 一次异常内存消耗问题的诊断及解决
- 一次tomcat的问题的解决
- Hibernate使用property-ref属性解决遗留数据库One To Many关系的问题。
- 用hibernate编写程序遇到的问题及解决方法
- 解决了winform作业中,一个类只实例化一次的问题
- Hibernate连接DB2的问题(已解决)
- 一次msmq安装问题的解决过程
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- [-好贴转载-] Jsp/struts/tapestry/hibernate等中文乱码问题解决
- hibernate中重复显示问题的解决方法