API критериев: могу ли я получить доступ к заданному псевдониму по его имени

Возможно ли с помощью Criteria API получить доступ к заданному псевдониму через объект Root?

Я определил соединение и присвоил ему псевдоним "ведущий":

final Root<Project> project = cq.from(Project.class);
project.join(Project_.lead).alias("lead");

Как я могу получить доступ к этому соединению, учитывая только корень и псевдоним (поскольку корень - единственный обработчик запроса, который я передаю)?

Я уже пытался перестроить соединение, перейдя снова, но это, похоже, нарушает оператор SQL:

    project.join(Project_.lead) // cannot do this

Спасибо


person Steve Oh    schedule 03.09.2013    source источник


Ответы (1)


From действительно имеет метод getJoins и метод TupleElement getAlias ​​. Root реализует их, поэтому должно работать следующее:

//TODO: apply generics; argument do not have to be root, but
//      something that implements From and TupleElement
private Join findJoin(Root root, String alias) {
    Set<Join> joins= root.getJoins();
    for (Join join: joins) {
        if (alias.equals(join.getAlias())) {
            return join;
        }
    }
    throw new IllegalArgumentException("No join for alias:" + alias);
}
person Mikko Maunu    schedule 03.09.2013
comment
спасибо, я использую тот же подход, но он не углубляется в иерархию - +1 - person Steve Oh; 03.09.2013
comment
getJoins идет только на один уровень в глубину, поэтому вам не повезло, если вы присоединяетесь к объединению. - person Amalgovinus; 08.03.2017