如题.例如:
1.有一个叫User的类;
2.该类与Role为多对多关系;
3.记录表表如下:
User表:
id user_name
1 user1
2 user2
Role表
id role_name
1 role1
2 role2
User_Role表(关联表)
user_id role_id
1 1
1 2
2 1
4.配置User中的getRoles()方法为fetch=FetchType.EAGER;
5.Assert.assertEquals(2, userDao.getAll().size()),
结果错误:期望为2,实际为3.
6.查看了调试sql,的确hibernate在这方面的方法有问题:如下:
select this_.id as id0_4_,this_.website as website0_4_, producttyp2_.user_id as user1_6_
from app_user this_
left outer join role producttyp2_
on this_.id=producttyp2_.user_id
(省略若干,但从其采用left outer join来看,肯定会返回3条记录).
7.在网上查了下,只有这个贴子提供了有价值的信息:
http://markmail.org/message/np4itw5ebyrdctzl
8.当前采用方法是Set users = new HashSet(dao.getAll()).
各位高见?请赐教.
manytomany设置fetch类型为FetchType.LAZY
[code="java"]@ManyToMany(fetch = FetchType.LAZY)[/code]
还可以修改Criteria的FetchMode为FetchMode.SELECT
[code="java"]criteria.setFetchMode(propertyName, FetchMode.SELECT);[/code]
用Lazy不就可以了?