代码之家  ›  专栏  ›  技术社区  ›  Sinan Samet

如何在2个相关表上执行左联接

  •  0
  • Sinan Samet  · 技术社区  · 8 年前

    所以我有两张桌子。一张用户表和一张完成的考试表。已完成的“检查”表具有作为外键的用户ID,并且与“用户”表作为一对一关联。

    我在用户模型中建立了这样的关系:

    @OneToOne(fetch = FetchType.EAGER, mappedBy = "user")
    private FinishedExam finishedExam;
    

    在FinishedExams模型中,如下所示:

    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "user_id")
    private User user;
    

    当我在控制器中调用所有完成的检查时:

    @GetMapping("/all")
    public Iterable<FinishedExam> getAllFinishedExams()
    {
        return finishedExamRepository.findAll();
    }
    

    我把所有完成的测试都链接到用户身上,这很好。

    我的问题是,是否可以让所有用户都使用他们完成的检查,如果他们有,如果他们没有(所以基本上是 LEFT JOIN )

    这在冬眠中是可能的吗?

    编辑:

    我刚试过,但它只返回所有没有考试的用户。

    @GetMapping("/allUsersWithExams")
    @Fetch(FetchMode.SELECT)
    public Iterable<User> getAllUsersWithTheirExams()
    {
        return userRepository.findAll();
    }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Zeromus    8 年前

    首先,可以确定,您只需自己编写查询:

    "Select u from Users u LEFT JOIN u.finishedExam"
    

    很简单。

    但是什么阻止你选择所有的用户并完成他们的所有考试呢?

    public Iterable<Users> getAllUsers()
    {
        return UsersRepository.findAll();
    }
    

    它会给你一张清单 Users 独立于是否有 finishedExam

    推荐文章