【问题标题】:How to do a Join Query on a Mysql fetch in JPQL如何在 JPQL 中对 Mysql 提取进行联接查询
【发布时间】:2014-10-22 22:30:47
【问题描述】:

我有一个用户表

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

还有一个表Tokens:

userID, Token (k)

Tokens中的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 中复制它?

我熟悉的简单 select fetch 命令是:(除了使用内置命令)

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

【问题讨论】:

  • 您需要Select p form Tokens join p.user 之类的东西,添加您的实体以获得更好的答案
  • @AVolpe 假设我的实体像上面那样映射.. 类用户具有 Int Id,类 Tokens 具有 int userID

标签: java mysql sql hibernate jpql


【解决方案1】:

当你使用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 开始,然后使用您的属性tokensToken 实体,并过滤Token 属性。

要获取您使用的列表:

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

【讨论】:

    猜你喜欢
    • 2022-12-08
    • 2017-02-13
    • 2018-09-04
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    相关资源
    最近更新 更多