2010-11-02 79 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如果你在你的问题中提供更多的细节,会更容易。