2

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

我已经定义了一个 Join 并给它一个别名“lead”

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

仅给定 Root 和别名(因为 Root 是我传递的唯一查询句柄),我如何才能访问该 Join?

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

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

谢谢

4

1 回答 1

3

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);
}
于 2013-09-03T18:00:42.207 回答