hibernate 1+N 查询问题

 

1+N 就是说如果在一个对象中关联了另外一个对象,同时fetchType为EAGER,取出想用对象的同时,被关联的对象都会再发一条sql语句被取出来

 

举例:Group 跟 User 是一对多的关系。

查询User

List<User> userList=session.createQuery("from User").list();

遍历userList,获得想要的数据。我们会发现,生成的sql语句,除了查询了我们的user 表,还查询了相关联的group表。

我们本来只需要1条语句能解决的问题,却多发出了N条语句,优劣显而易见

解决方法1:(1)语句换成:List<User> userList=session.createCriteria(User.class).list();

      createCriteria默认的查询方式是左连接表查询

      (2)使用nativeSQl 做左外连接查询,能够在一条select语句中查询出User表的所有记录,以及匹配的Group表的记录。

 

解决方法2:manytoone 默认检索策略eager,修改检索策略为fetch=fetchType.lazy

 

解决方法3:根据实际数据库设计在一的一方@Entity下面再加一行注解@BatchSize(size=5)

      3这种方法用在解决1+N这种问题不恰当

 

posted @ 2016-04-14 18:04  猫儿36  阅读(201)  评论(0编辑  收藏  举报