【问题标题】:QueryDSL difference between explicit join and where clause?QueryDSL显式连接和where子句的区别?
【发布时间】:2015-04-22 04:14:47
【问题描述】:

假设您有一个 QueryDSL 查询,如下所示:

JPQLQuery query = new JPAQuery(em);
QUser user = QUser.user;
QLocation location= QLocation.location;

query.from(User).innerJoin(user.location, location).where(user.name.eq("Giuseppe").and(location.name.eq("Vatican City")));

这与以下(在功能上)有何不同?

JPQLQuery query = new JPAQuery(em);
QUser user = QUser.user;

query.from(User).where(user.name.eq("Giuseppe").and(user.location.name.eq("Vatican City")));

在我看来,两者都能够解决用户的位置必须是梵蒂冈城的条件。此外,两者都返回允许在对象图中导航的对象。

那么有什么不同吗?为什么不直接使用第二个更紧凑的?

编辑:它们生成不同的 JPQL,这是肯定的,但我不确定最终结果是否有任何不同。为什么我们要明确列出我们正在执行的连接操作?

编辑 2:似乎它们可能是相同的...http://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/ch11.html#d5e2888

【问题讨论】:

    标签: java sql jpa jpql querydsl


    【解决方案1】:

    为了记录,where 子句中的隐式连接执行内部连接。 According to the QueryDSL forum,当您想要重用连接或使用内部连接之外的其他连接类型时,您将使用显式连接。否则,您可以只使用 where 子句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 2012-01-08
      • 2018-07-01
      • 2017-10-07
      • 2012-02-19
      • 2019-06-24
      • 1970-01-01
      相关资源
      最近更新 更多