如何在JPQL中对Mysql提取进行连接查询

时间:2014-08-28 23:05:01

标签: java mysql sql hibernate jpql

我有一个表用户

Id(key)  |  username | some other cols...n

和表格标记:

userID, Token (k)
标记中的

userID被定义为来自users.id的外键。

我想要做的是:给定一个Tokens.token,从用户那里获取col信息。

SQL中的mysql命令是这样的:

select a.* from users a left join tokens b on a.User_Id = b.userId and b.userId = 1;

(我不知道以上是否是最佳的......但它会返回我想要的东西)

我如何在JPQL中复制它?

我熟悉的简单选择获取命令是:(除了使用内置的)

String qlString = "Select p from Tokens p WHERE p.token=:token";
        TypedQuery<Tokens> query = this.entityManager.createQuery(qlString,Tokens.class).setParameter("token", token);

1 个答案:

答案 0 :(得分:0)

当您使用JPA时,您不必考虑表和列,您使用实体和关系,查询必须是:

select u.info from User u join u.tokens t where t.token = :token

这假定:

@Entity class User {
    @OneToMany List<Token> tokens;
    String info;
}

@Entity class Token {
    String token;
}

您从User开始,然后将您的属性tokens转到Token实体,并过滤Token属性。

要获取您使用的列表:

List<String> infos = entityManager.createQuery(YOUR_QUERY).list();