假设您有一个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
答案 0 :(得分:4)
对于记录,where子句中的隐式连接执行内连接。 According to the QueryDSL forum,当您想要重用联接或使用内部联接旁边的其他联接类型时,您将使用显式联接。否则,您可以使用where子句。