7
我有以下JPA
實體:RIGHT JOIN在JPQL
@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)
你錯過了us.userAccess的UA別名。而且,具有相反的OneToMany關聯就足夠了。沒有必要使它成爲所有者端(這在JPA,BTW中是無法實現的) –
@Matt用戶可以參與許多其他對象,因此對於我來說,這些對象更合理地指向用戶,否則。你認爲我的RIGHT JOIN有什麼問題嗎? –
@JB Nizet感謝您的糾正,我編輯這個匆忙。我自己沒有嘗試過上述查詢。你確定JPA可以像你描述的那樣離開嗎?隨意編輯我的答案,以減少失敗,或者只是發佈你自己的基於我的... –