我有以下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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。