У меня есть таблица сущностей, подобная этой:
class Parent {
private Child lc;
private Child rc;
private Double price;
}
class Child {
private Integer type;
private Integer passed;
}
Теперь я найду эквивалентные критерии для следующего запроса:
select
case when rc.passed = 0 then 1 else -1 end,
p.price
from Parent p
join Child lc on lc.id = p.lc
join Child rc on rc.id = p.rc
where lc.type = 0;
Я создаю критерии, подобные этому:
DetachedCriteria criteria = DetachedCriteria.forClass(Parent.class);
// create aliases and do Restrictions
ProjectionList pl = Projections.projectionList();
Type[] noeVoSar = { IntegerType.INSTANCE };
String[] colAliasNoeVoSar = { "noeVoSar" };
String sql = "(CASE WHEN passed = 0 THEN 1 ELSE -1 END)";
pl.add(Projections.sqlGroupProjection(sql + " as noeVoSar", sql, colAliasNoeVoSar, noeVoSar));
pl.add(Projections.groupProperty("price"));
criteria.setProjection(pl);
Моя проблема в пропущенном поле. как левые, так и правые отношения прошли поле и база данных сообщает column ambiguously defined
. я знаю, что Hibernate {alias}
, который ссылается на псевдоним корневой таблицы. но я не знаю, есть ли подобное решение для отношений?
Я знаю, что в JPA есть регистр в своих критериях, но я должен использовать hibernate