我有以下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)
答案 0 :(得分:6)
你应该让UserClient
表成为关系的所有者方(这使IMO更符合逻辑)。然后,您可以使用LEFT JOIN
代替RIGHT JOIN
。
SELECT uc, MAX(ua.accessTs) FROM UserClient uc LEFT JOIN uc.userAccess ua