Criteria API:我可以通过其名称访问给定的别名

时间:2013-09-03 14:24:00

标签: jpa-2.0 eclipselink criteria-api

Criteria API是否可以通过Root对象访问给定的别名?

我已经定义了一个Join,并为其添加了别名“lead”

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

如果仅使用Root和别名,我如何才能获得对该Join的访问权限(因为Root是我传递的唯一查询句柄)?

我已经尝试通过再次导航来重建Join,但这似乎打破了SQL语句:

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

由于

1 个答案:

答案 0 :(得分:3)

从确实有方法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);
}