经过搜索,我发现JPQL中没有正确的连接。我看到还有另一种使用JPA双向连接(不是正确的连接,而是使用pojo对象)来实现它的方法,但我在控制台中注意到的一件事是它对数据库进行了很多调用,例如见下表。
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 |我想要平面表中的所有行,只匹配用户表中的行
// 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
// suppose I have FlatEntity Object
flatEntity.getUserToFlatEntity();上面的代码将在where条件flat_ID =?(在本例中为4次)的情况下命中每个平面no的数据库,我认为这不是很好的性能。
那么,有没有什么方法可以让JPQL在不影响性能的情况下实现正确的连接呢?
实体配置
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)发布于 2016-02-17 21:18:42
您应该使扁平表成为关系的所有者端(这在逻辑上更有意义)。然后,您可以使用左连接而不是右连接。
SELECT uc, MAX(ua.accessTs) FROM Flat Table uc LEFT JOIN uc.User Table uaHere's why left join on UserTable works:
有关更多详细信息,请访问此处:RIGHT JOIN in JPQL

发布于 2016-02-14 07:28:59
RRIGHT JOINS (又称RRIGHT OUTER JOINS )与
又名SLEFT OUTER JOINR.的SLEFT JOINR
发布于 2016-02-16 02:21:25
您在JPQL中找不到任何正确连接的(有效)示例。正如在此EclipseLink forum post中提到的,JPA规范不包括右连接:
JPA规范只定义了一个左外连接(
)。您可以随时提交EclipseLink增强或请求将其包含在JPA规范中。
也许你可以求助于native query
https://stackoverflow.com/questions/35193129
复制相似问题