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
由于
答案 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);
}