当前位置: 首页 > 知识库问答 >
问题:

QueryDSL显式连接和where子句之间的区别?

澹台锐
2023-03-14

假设您有一个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

共有1个答案

黄凌龙
2023-03-14

对于记录,where子句中的隐式联接执行内部联接。根据QueryDSL论坛,当您想重用连接或使用内部连接之外的其他连接类型时,应该使用显式连接。否则,您只能使用where子句。

 类似资料:
  • 使用Query DSL和hibernate(Spring Data JPA)构建查询,如下所示 这里的逻辑很简单:如果有一个与某个人关联的银行帐户,则按银行ID过滤结果。 实体具有一个,它包含整数值。实体可能具有也可能没有

  • 问题内容: sql语句和子句有什么区别 问题答案: 以下语句: 由以下子句组成: WHERE x = y SELECT foo FROM bar JOIN quux

  • 由于在抽象中解释我要做什么有点困难,所以我克隆了spring-boot-sample-data-jpa项目,并对其进行了修改,以展示我正在尝试做什么的示例。 我有这些模型类,您将注意到和扩展了实体。 我正在尝试编写一个查询,返回包含或的所有城市,其主要运动是给定类型的。 我编写了一个JPQL版本的查询,它有点难看(我不喜欢部分来表示它是一家水疗酒店),但似乎返回了我想要的。 但该查询的QueryD

  • 我是QueryDSL的新手,能够在WHERE-in子句中组装具有多个列的查询,如下所示: 我有主要查询的部分: 但我不知道如何实现where子句。如何在QueryDSL中实现这一点? 提前致谢!

  • 问题内容: 我正在尝试使用一个简单的已提交字段在MySQL中获取记录。更准确地说,用户输入名称(名字或姓氏或全名),服务器应返回匹配的行。 到目前为止,我正在做的事情是这样的: 暂时可以正常工作,但是(显然)当用户提交全名时,该方法将无法正常工作。有没有办法在整个“ WHERE类型条件”和“ HAVING类型条件”之间添加OR?这样,我可以做类似的事情: 我知道我可以拆分原始字符串,但这会产生一些

  • 我正在为一个SQL的实现工作,它应该在Where和Having子句之间使用联合操作来显示结果。例如, sql语句的目的是返回同时满足where和having条件的结果集。 resultset1<=select*from table1,其中col1='get';resultset2<=select*from table1 group by col2 avg(col3)>30 final result