如何在2个相关表上执行LEFT JOIN

时间:2018-05-18 14:00:42

标签: java hibernate left-join

所以我有2张桌子。 users表和finished_exams表。 finished_exams表有一个user_id作为外键,并作为OneToOne与users表相关。

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

@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();
}

我将所有Finishedexams与用户联系起来很好。

我的问题是,是否有可能让所有用户使用已完成的测试,如果他们拥有它而没有他们没有(所以基本上是LEFT JOIN

这可能在Hibernate中吗?

编辑:

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

@GetMapping("/allUsersWithExams")
@Fetch(FetchMode.SELECT)
public Iterable<User> getAllUsersWithTheirExams()
{
    return userRepository.findAll();
}

1 个答案:

答案 0 :(得分:1)

首先确定是可能的,你只需要自己编写查询:

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

很简单。

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

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

它会为您提供所有Users的列表,而不管是否有finishedExam