所以我有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();
}
答案 0 :(得分:1)
首先确定是可能的,你只需要自己编写查询:
"Select u from Users u LEFT JOIN u.finishedExam"
很简单。
但是什么阻止你选择所有用户并完成所有完成的考试?
public Iterable<Users> getAllUsers()
{
return UsersRepository.findAll();
}
它会为您提供所有Users
的列表,而不管是否有finishedExam