Сначала я создал игрушечный пример выше, так что вполне возможно, что игрушка сработала бы, и даже предложение Партенона могло бы сработать на примере игрушки.Документация, кажется, указывает, что любой из них должен, но он не работал в моем реальном сценарии, который слишком многословен, чтобы здесь углубляться.
Проблема в том, что не удалось найти свойство location.state
.То, что в конечном итоге сработало, заключалось в явном создании псевдонимов в критериях:
criteria.createAlias("location", "location").createAlias("location.state", "state");
Я все еще не мог использовать псевдоним «state», но «location.state» тогда работал для меня, поэтому создание псевдонимов каким-то образомподготовил конструктор запросов, чтобы он мог найти его, когда раньше не мог.Все это кажется очень хакерским и не элегантным, поэтому я не горжусь этим решением, но это то, что сработало.Это звучит как ошибка для кого-то еще?
Для любопытных, не вдаваясь в общую модель сущности, вот фактические критерии и прогнозы, которые сработали для меня:
obsCriteria.createAlias("phenomenon", "phenomenon").createAlias(
"phenomenon.phenomenonGroup", "phenomenonGroup");
ProjectionList projection = Projections.projectionList()
.add(Projections.avg("value"))
.add(Projections.groupProperty("phenomenon.phenomenonGroup"));
obsCriteria.setProjection(projection);