关于hibernate中lazy的一点疑惑
今天在学hibernate的时候遇到一个异常:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
网上搜到的解决办法是设置lazy=false。
问题虽然解决了,但我有个疑问:延迟加载的作用是在程序未调用前,由hibernate生成一个代理对象,调用时再从数据库读取。但是在调用的时候,dao里面事务已经提交了,session也关闭了,不是明摆着报异常么...
比如说如下代码:
User.java
....
private UserGroup userGroup ;
....
....
private Set<User> users ;
....
...
public User getById(int id) {
Session session = getSession() ;
User user = (User) session.get(User.class, id) ;
return user;
}
...
<set name="users" table="DF_USER" inverse="false" lazy="true">
<key>
<column name="[USERGROUP_ID]" />
</key>
<one-to-many class="test.model.User" />
</set>
</set>
...
User u = userDao.getById(1);
UserGroup ug = u.getUserGroup() ;
...