【问题标题】:Criteria API: can I access a given alias by its nameCriteria API:我可以通过名称访问给定的别名吗
【发布时间】:2013-09-06 20:01:09
【问题描述】:

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

我定义了一个 Join 并给它一个别名 "lead":

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

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

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

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

谢谢

【问题讨论】:

    标签: jpa-2.0 eclipselink criteria-api


    【解决方案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);
    }
    

    【讨论】:

    • 谢谢,我使用相同的方法,但它并没有深入层次结构 - +1
    • getJoins 只深入一级,所以如果你加入一个连接,你就不走运了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    相关资源
    最近更新 更多