hibernate {псевдоним} эквивалент для подкритериев - PullRequest
0 голосов
/ 12 марта 2019

У меня есть таблица сущностей, подобная этой:

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

...