首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPQL右连接

JPQL右连接
EN

Stack Overflow用户
提问于 2016-02-04 13:25:09
回答 3查看 9.4K关注 0票数 5

经过搜索,我发现JPQL中没有正确的连接。我看到还有另一种使用JPA双向连接(不是正确的连接,而是使用pojo对象)来实现它的方法,但我在控制台中注意到的一件事是它对数据库进行了很多调用,例如见下表。

代码语言:javascript
复制
       Flat Table                   UserToFlat                    User
| Flat_ID  |  Flat No  |      | ID   |  Flat_ID | User_ID |    | User_ID | Name |
|  1       |    101    |      | 1    |    1     |  1      |    |   1     | XYZ  |  
|  2       |    102    |      | 2    |    2     |  2      |    |   2     | PQR  |
|  3       |    103    |      | 3    |    3     |  3      |    |   3     | ABC  |
|  4       |    104    |

我想要平面表中的所有行,只匹配用户表中的行

代码语言:javascript
复制
// below query do not work as flat is having primary key and usertoflat having foreign key
select f, u from FlatEntity f left join f.userToFlatEntity uf join uf.user u;

// now if I try right join then jpql throws exception
select f from UserToFlatEntity uf right join uf.flatEntity f;

现在,如果我使用jpql birectional和fetch using object for

代码语言:javascript
复制
// suppose I have FlatEntity Object 
flatEntity.getUserToFlatEntity();

上面的代码将在where条件flat_ID =?(在本例中为4次)的情况下命中每个平面no的数据库,我认为这不是很好的性能。

那么,有没有什么方法可以让JPQL在不影响性能的情况下实现正确的连接呢?

实体配置

代码语言:javascript
复制
public class FlatEntity {
    @OneToOne(mappedBy = "flatEntity")
    private UserToFlatEntity userToFlatEntity;

   // getter setter
}

public class UserToFlatEntity {
    @ManyToOne
    @JoinColumn(name = "flatId", insertable = false, updatable = false)
    private FlatEntity flatEntity;
}

public class UserEntity {
    @OneToMany(mappedBy = "userEntity")
    private Set<UserToFlatEntity> userToFlatEntitySet;
}

Exception
 Path expected for join!
 at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:369)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-17 21:18:42

您应该使扁平表成为关系的所有者端(这在逻辑上更有意义)。然后,您可以使用左连接而不是右连接。

代码语言:javascript
复制
SELECT uc, MAX(ua.accessTs) FROM Flat Table uc LEFT JOIN uc.User Table ua

Here's why left join on UserTable works:

有关更多详细信息,请访问此处:RIGHT JOIN in JPQL

票数 3
EN

Stack Overflow用户

发布于 2016-02-14 07:28:59

RRIGHT JOINS (又称RRIGHT OUTER JOINS )与

又名SLEFT OUTER JOINR.的SLEFT JOINR

票数 2
EN

Stack Overflow用户

发布于 2016-02-16 02:21:25

您在JPQL中找不到任何正确连接的(有效)示例。正如在此EclipseLink forum post中提到的,JPA规范不包括右连接:

JPA规范只定义了一个左外连接(

)。您可以随时提交EclipseLink增强或请求将其包含在JPA规范中。

也许你可以求助于native query

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35193129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档