Jpa 右键加入JPQL

Jpa 右键加入JPQL,jpa,jpql,Jpa,Jpql,我拥有以下JPA实体: @Entity class UserClient{ @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; } @Entity class UserAccess{ @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; @ManyToOne(optio

我拥有以下
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
one中没有任何记录

SELECT ua.user, MAX(ua.accessTs) FROM UserAccess ua RIGHT JOIN ua.user
我错过什么了吗?这是正确的连接用法吗


我正在使用最新的Hibernate JPA发行版(4.0.0.CR1)

您应该使
UserClient
表成为关系的所有者方(这在我看来更有逻辑意义)。然后可以使用
左连接
而不是
右连接

SELECT uc, MAX(ua.accessTs) FROM UserClient uc LEFT JOIN uc.userAccess ua
:


您错过了us.userAccess上的ua别名。此外,拥有反向的一对一关联就足够了。无需将其设为所有者方(这在JPA中是不可能的,顺便说一下)@Matt User可以涉及许多其他对象,因此对我来说,这些对象指向User比指向其他对象更符合逻辑。你认为我的右连接有什么问题吗?@JB Nizet谢谢你的更正,我匆忙编辑了这个。我自己还没有尝试过上述问题。你确定JPA可以像你描述的那样离开加入吗?请随意编辑我的答案,以减少失败,或只是张贴你自己的基于我的。。。