我也遇到相同问题,不知楼主问题解决么?no session or session was closed--猜想应该是这个原因,hibernate如果需要访问lazy的属性,必须要有一个session,而spring的hibernateTemplate默认是执行一个方法一个session,所以当你用hibernateTemplate的方法得到数据的时候,那个session已经关闭了,也就无法lazy load了。查阅文档说将访问方法写在hibernateTemplate的executeFind(new HibernateCallBack(doInHibernate(Session)))中可以访问同一个session,不知楼主试过成功没?
等待高手
我还是要用lazy load的
写HQL也有同样的问题啊。
我是想解决这个问题,换JDBC改动太大而且不方便
CiTables table = MetaServiceUtils.getCiTablesService().findById(
60000000);
if (table != null && table.getCiAttributes() != null) { System.out.println(table.getTableId());
for (Object obj : table.getCiAttributes()) {
CiAttribute attr = (CiAttribute) obj;
System.out.println(attr.getFldName());
}
}
}
这个有问题,不应该这样,如果像你这样想,那程序就不用写了,直接可以从一个导航到另一个,这样一个一个下去,
table.getCiAttributes()换成MetaServiceUtils.getCiTablesService().getCiAttribute()至于里面的具体方法你自己搞了.也让它从服务里得到一个集合.
@Transactional
public void update() {
CiTables table = MetaServiceUtils.getCiTablesService().findById(
60000000);
if (table != null && table.getCiAttributes() != null) { System.out.println(table.getTableId());
for (Object obj : table.getCiAttributes()) {
CiAttribute attr = (CiAttribute) obj;
System.out.println(attr.getFldName());
}
}
}