hibernate中懒加载的处理

hibernate中懒加载的处理 (2008-12-01 14:26:52)
标签:懒加载 杂谈 分类:技术料理

hibernate中,如果在映射对象关系的时候,在一对多中(group->users)如果设置了lazy load(懒加载),那么根据group得到users时,需要特殊处理。如下:

使用查询


import net.sf.hibernate.HibernateException;import net.sf.hibernate.Session;import net.sf.hibernate.Query;import org.springframework.orm.hibernate.HibernateCallback;import org.springframework.orm.hibernate.support.HibernateDaoSupport;public class UserDAO extends HibernateDaoSupport{. . . public Group findGroupByName(String name) {return (Group) getHibernateTemplate().find("from Group g where g.name=?",name).get(0);} public Group findPopulatedGroupByName(final String name) {HibernateCallback callback = new HibernateCallback(){public Object doInHibernate(Session session) throws HibernateException, SQLException {Group group =null;String query = "from Group g where g.name=?";Query queryObject = getHibernateTemplate().createQuery(session, query);queryObject.setParameter(0, name);group = (Group) queryObject.list().get(0);group.getUsers().size();//force loadreturn group;}};return (Group) getHibernateTemplate().execute(callback);}. . . }


您可能会注意到第二个方法比第一个方法复杂得多,因为它强迫加载 users 集合。因为 Group->Users 之间的关系设置为 lazy initialize(即表 2 中 lazy="true"),组对象需要一个活跃的会话以查询用户。在定义 Group 和 Users 之间关系时设置这个属性为 lazy="false",则不需要第二个方法。在这种情况下,可能使用第一种方法 (findGroupByName) 列出组,用第二种方法(findPopulatedGroupByName)查看组细节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值