2010-11-02 75 views
2

今天剛剛開始使用JPA,所以我非常喜歡它。
如何在JPA中說
"SELECT login.ID, userID, logInTime, logOutTime, user.ID AS 'uID', surname FROM login, user WHERE login.userID = user.ID"
我需要通過用戶ID連接兩個表。
我在網上瀏覽了幾個教程,但無法找到對此的讚賞。
Thanx!對JPA的SQL查詢加入

+2

您能否描述您的域模型?否則很難在編寫JPQL查詢時給你提供建議。 – 2010-11-02 21:02:50

回答

0

假設登錄和用戶現在對象,並且還假定登錄和用戶之間的關係是一個用戶有許多登錄將是這樣

select 
     L.ID, 
     u.userID, 
     L.logInTime, 
     L.logOutTime, 
     u.ID 
from 
     User U, 
     IN(u.logins) L /*note that the IN makes the inner join between Login and user*/ 

Renember財產以後我假設之間的映射實體

2

JPQL查詢是針對對象而不是表寫的。在不知道對象是什麼以及如何定義它們之間的關係的情況下編寫查詢是不可能的。

您需要先創建代表LoginUser的實體對象。您可以映射它們之間的關係,然後成爲查詢的連接。

3

瘋狂猜測我猜你的域名模型至少包含兩個實體UserLogin,後者表示類似於會話。 (基數User -1:N- Session

我想象中的實體:

@Entity 
class User { 
    @OneToMany(mappedBy="user") 
    private List<Login> logins; 
    ... 
} 

@Entity 
class Login { 
    @ManyToOne 
    private User; 
    ... 
} 

檢索所有Login S:

jpql: "from Login" 

(關聯User對象由取在@ManyToOne方面,默認的提取類型是渴望提取。)

檢索所有User S:

jpql: "select u from User u join fetch u.logins" 

(關聯List<Login>對象默認情況下不取。在@OneToMany側的默認獲取類型是延遲抓取)

開始使用JPA:。openJPA documentation (看看對實體設計和第10章章JPQL 4和5的OpenJPA的一般JPA零件文檔符合所有JPA實現。)

PS如果你在你的問題中提供更多的細節,會更容易。