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可以像你描述的那样离开加入吗?请随意编辑我的答案,以减少失败,或只是张贴你自己的基于我的。。。