【发布时间】:2014-04-24 09:16:05
【问题描述】:
我已将 CustomerEntity 映射到数据库中的表 customers。它与orders 和addresses 具有一对多关系。现在我用下一个代码检索客户的订单:
DetachedCriteria criteria = DetachedCriteria.forClass(CustomerEntity.class);
criteria.add(Restrictions.eq("id", patientId));
criteria.createCriteria("orders", CriteriaSpecification.LEFT_JOIN).add(Restrictions.and(
Restrictions.isNull("deletedDate"),
Restrictions.or(Restrictions.isNull("old"), Restrictions.eq("old", BoolType.FALSE))));
CustomerEntity customer = queryDao.searchSingle(criteria);
查询DAO:
public <T> T searchSingle(DetachedCriteria criteria) {
return (T) criteria.getExecutableCriteria(getCurrentSession()).uniqueResult();
}
但是当我尝试调用 customer.getAddresses() 时会抛出下一个异常:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: , no session or session was closed
这是因为默认情况下休眠没有加载一对多实体。
我如何在不修改Customer 实体的情况下也检索他的addresses?
【问题讨论】:
-
我不得不在这里摇一摇手指:如果你用谷歌搜索过“hibernatelazyinitializationexception”,你会得到大量关于如何解决、为什么以及如何解决的信息,包括大量现有的 stackoverflow 线程。