我有以下 JPA
实体:
@Entity
class UserClient{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
}
@Entity
class UserAccess{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne(optional = false, cascade = { CascadeType.REFRESH })
private UserClient user;
@Temporal(TemporalType.TIMESTAMP)
private Date accessTs;
}
现在我想运行一个
JPQL
查询以获取具有上次访问日期的用户列表。不幸的是,以下查询不会返回从未访问过系统的用户,即存在于
UserClient
中表,但在 UserAccess
中没有任何记录一。SELECT ua.user, MAX(ua.accessTs) FROM UserAccess ua RIGHT JOIN ua.user
我错过了什么吗?正确使用 RIGHT JOIN 吗?
我正在使用最新的 Hibernate JPA 版本 (4.0.0.CR1)
最佳答案
您应该制作 UserClient
表关系的所有者方面(这在 IMO 中更具逻辑意义)。然后你可以使用 LEFT JOIN
而不是 RIGHT JOIN
.
SELECT uc, MAX(ua.accessTs) FROM UserClient uc LEFT JOIN uc.userAccess ua
Here's why left join on
UserAccess
works :关于jpa - JPQL 中的右连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7210269/