【发布时间】:2016-02-18 17:52:06
【问题描述】:
这是我的标准:
public Commercial findManager(Entity entity) {
DetachedCriteria criteria2 = DetachedCriteria.forClass(Role.class);
criteria2.createAlias("workStation", "workStation");
criteria2.createAlias("workStation.entity", "entity");
criteria2.add(Restrictions.eq("entity.id", entity.getId()));
criteria2.createAlias("commercial", "commercial", CriteriaSpecification.LEFT_JOIN);
criteria2.setFetchMode("commercial", FetchMode.JOIN);
criteria2.createAlias("commercial.function", "function");
criteria2.add(Restrictions.eq("function.name", "MANAGER"));
criteria2.setProjection(Projections.property("commercial"));
Commercial commercial = (Commercial) getHibernateTemplate().findByCriteria(criteria2).get(0);
return commercial;
}
此条件按预期工作,只是它返回一个代理。由于我要查询该代理上的许多属性,我想强制休眠在同一个查询中加载该对象,但即使在 JOIN 模式下使用 fetchmode,它似乎也不起作用。怎么了?
我使用休眠 3.3.2 和 spring 2.5
【问题讨论】:
-
您确定返回的实例虽然是代理,但没有初始化?看看这个answer。
-
您说得对,在查看了您的建议并进行了进一步调查后,我发现代理实际上是如何初始化的。