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这种问题不恰当