Hibernate формирует запрос в котором два раза извлекает id
Есть три сущности:
@Entity
@Table(name = "departments")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "department_id", nullable = false)
private Long id;
@Column(name = "number", nullable = false, unique = true)
private Integer number;
@Column(name = "name", nullable = false, unique = true)
private String name;
@OneToMany
@JoinColumn(name = "department_id")
private List<Vacancy> vacancies = new ArrayList<>();
}
@Entity
@Table(name = "vacancies")
public class Vacancy {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "vacancy_id", nullable = false)
private Long id;
@Column(name = "employee_position", nullable = false)
private String employeePosition;
@Column(name = "salary", nullable = false)
private Long salary;
@OneToOne
@JoinColumn
private Employee employee;
}
@Entity
@Table(name = "employees")
public class Employee {
@Id
@Column(name = "personnel_number", nullable = false)
private Short personnelNumber;
@Column(name = "firstname", nullable = false)
private String firstname;
@Column(name = "lastname", nullable = false)
private String lastname;
@Column(name = "patronymic")
private String patronymic;
@Column(name = "birth_date")
private LocalDate birthDate;
@Column(name = "email", unique = true)
private String email;
@Column(name = "telephone_number", unique = true)
private String telephoneNumber;
}
Hibernate создает таблицы как надо, все работает.
Только вот при получении списка вакансий и выводе в консоль
List<Vacancy> vacancyList = department.getVacancies();
Hibernate формирует запрос, в котором получает vacancy_id два раза
Hibernate:
select
vacancies0_.department_id as departme5_2_0_,
vacancies0_.vacancy_id as vacancy_1_2_0_,
vacancies0_.vacancy_id as vacancy_1_2_1_,
vacancies0_.employee_personnel_number as employee4_2_1_,
vacancies0_.employee_position as employee2_2_1_,
vacancies0_.salary as salary3_2_1_,
employee1_.personnel_number as personne1_1_2_,
employee1_.birth_date as birth_da2_1_2_,
employee1_.email as email3_1_2_,
employee1_.firstname as firstnam4_1_2_,
employee1_.lastname as lastname5_1_2_,
employee1_.patronymic as patronym6_1_2_,
employee1_.telephone_number as telephon7_1_2_
from
vacancies vacancies0_
left outer join
employees employee1_
on vacancies0_.employee_personnel_number=employee1_.personnel_number
where
vacancies0_.department_id=?
Зачем и почему он так делает?
Источник: Stack Overflow на русском