Как выполнить LEFT JOIN на 2 связанных таблицах - PullRequest
0 голосов
/ 18 мая 2018

Итак, у меня есть 2 таблицы.Таблица пользователей и таблица Finised_exams.Таблица Finised_exams имеет user_id в качестве внешнего ключа и связана как OneToOne с таблицей users.

Я сделал отношение в модели 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();
}

Я связываю всех финишедексам с пользователями, что хорошо.

У меня вопрос: возможно ли получить ВСЕХ пользователей с их готовым экзаменом, если они есть и без него (если, в основном, это LEFT JOIN)

Возможно ли это в Hibernate?

РЕДАКТИРОВАТЬ:

Я только что попробовал это, но он возвращает только всех пользователей без экзаменов.

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

1 Ответ

0 голосов
/ 18 мая 2018

Прежде всего, это возможно, вам просто нужно написать запрос самостоятельно:

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

достаточно просто.

Но что мешает вам просто выбрать всех пользователей и получить все ихзаконченный экзамен?

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

Это даст вам список всех Users независимо от наличия или отсутствия finishedExam

...