我有一个我建立的Hibernate Criteria对象:
Criteria obsCriteria = hibernateTemplate.getSessionFactory()
.getCurrentSession().createCriteria(Observation.class);
ProjectionList projection = Projections.projectionList()
.add(Projections.rowCount())
.add(Projections.avg("value").as("avgScore"))
.add(Projections.avg("type.score"))
.add(Projections.max("date"))
.add(Projections.groupProperty("observedSubject"));
criteria.setProjection(projection);
这为我生成了正确的结果,但“observedSubject”属性是一个实体。当我将set show_sset设置为true时,我看到在第一次查询(返回18行)之后,有18个选择来获取observeSubject实体。我试过了:
criteria.setFetchMode("observedSubject", FetchMode.JOIN);
但那没用。作为黑暗中的一种刺,我试过了:
criteria.createAlias("observedSubject", "observedSubject", Criteria.FULL_JOIN);
但这也行不通。有没有办法阻止这种行为?
答案 0 :(得分:0)
您是否注释了observedSubject
到FetchType.LAZY
?如果没有,Hibernate将恢复为默认行为,即EAGER
获取。
如果您做希望在运行时获取子关联,但您不希望对每个关联进行单独的SELECT
调用,请在关联上设置@BatchSize
并且Hibernate将批量调用SELECT
,提高效率。