2

我有一个由此构建的 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_sql 设置为 true 时,我看到在第一个查询(返回 18 行)之后,有 18 个选择来获取observedSubject 实体。我试过了:

criteria.setFetchMode("observedSubject", FetchMode.JOIN);

但这没有用。作为一种在黑暗中的刺,我试过:

criteria.createAlias("observedSubject", "observedSubject", Criteria.FULL_JOIN);

但这也不起作用。有什么办法可以防止这种行为?

4

1 回答 1

0

你注释observedSubject到了FetchType.LAZY吗?如果没有,Hibernate 将恢复到默认行为,即EAGER获取。

如果您确实希望在运行时获取子关联,但您不想SELECT为每个关联单独调用,请@BatchSize在关联上设置,Hibernate 将批处理SELECT调用,从而提高效率。

于 2011-07-24T13:48:06.020 回答