【问题标题】:how to make a join of 3 tables in JPA?如何在 JPA 中连接 3 个表?
【发布时间】:2018-09-21 11:24:46
【问题描述】:

我想在 JPA 中连接 3 个表。 这是 3 个表:

  • USER [(pk) 用户 ID、登录名、密码];

  • TASK [(pk) taskId, taskname, start, end, #userId];

  • TASK_USER [(cmp) taskId, (cmp) userId];

这是要在 JPA 中执行的 SQL 查询:

SELECT tu.taskId, t.start, t.end 
  FROM task as t, 
       user as u, 
       task_user as tu 
 WHERE (tu.taskId = t.taskId 
   AND tu.userId = u.userId 
   AND t.userId = u.userId) 
   AND tu.userId = '2';

但给我带来问题的是根据 JPA 的要求编写的语法。

你能帮帮我吗?

【问题讨论】:

  • JPA 使用实体(类)而不是表。定义类!

标签: sql jpa


【解决方案1】:
SELECT tu.taskId, t.start, t.end 
FROM task as t, user as u, task_user as tu 
WHERE tu.taskId = t.taskId AND tu.userId = u.userId 
      AND t.userId = u.userId 
      AND tu.userId = '2';

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT tu.taskId, t.start, t.end FROM task as t inner join user as u
    on u.userId = t.userId inner join task_user as tu on tu.taskId = t.taskId
    where tu.userId = '2';
    

    【讨论】:

      【解决方案3】:

      如果你已经定义了你的实体与关系 ManyToMany 之间的关系 如果不是https://vladmihalcea.com/the-best-way-to-use-the-manytomany-annotation-with-jpa-and-hibernate/,请检查此内容@

      你可以写这种查询

      SELECT t.taskId, t.start, t.end FROM User as u left join u.tasks WHERE u.userId = '2';
      

      【讨论】:

        【解决方案4】:

        谢谢,没关系。我可以在 JPA 中将查询编写为 SQL。语法与 SQL 相同,我可以返回一个对象,例如:连接中的用户对象

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-12-02
          • 2015-09-05
          • 2021-09-07
          • 1970-01-01
          • 1970-01-01
          • 2015-03-24
          • 1970-01-01
          相关资源
          最近更新 更多