SQL查询到JPA联接

时间:2010-11-02 20:59:52

标签: java sql jpa

今天刚开始使用JPA,所以我很擅长新事物 如何在JPA中说"SELECT login.ID, userID, logInTime, logOutTime, user.ID AS 'uID', surname FROM login, user WHERE login.userID = user.ID"? 我需要通过userID连接两个表。
我在网上浏览了几个教程,但是找不到这个问题 感谢名单!

3 个答案:

答案 0 :(得分: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 (查看实体设计的第4章和第5章以及JPQL的第10章.openJPA文档的一般JPA部分适合所有JPA实现。)

P.S。如果你在问题中加入更多细节会更容易。

答案 1 :(得分:2)

JPQL查询是针对对象而不是表格编写的。在不知道对象是什么以及如何定义它们之间的关系的情况下编写查询是不可能的。

您需要先创建代表LoginUser的实体对象。您映射它们之间的关系,然后它成为查询的连接。

答案 2 :(得分: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我假设实体之间的映射