У меня есть проблема с этим простым левым соединением.
У меня есть две таблицы: Сотрудник и Отдел
Сотрудник имеет многозначную связь с Отделом:
public class Employee {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_EMPLOYEE")
private Long id;
@Column(name = "NAME")
private String name;
@Column(name = "SURNAME")
private String surname;
@ManyToOne()
private Department department;
И отдел:
@Entity
@Table(name = "DEPARTMENT")
@SequenceGenerator(name = "SEQ_DEPARTMENT", sequenceName = "SEQ_DEPARTMENT", allocationSize = 1)
public class Department {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_DEPARTMENT")
private Long id;
@Column(name = "NAME")
private String name;
В дБ
SELECT * FROM EMPLOYEE;
ID NAME SURNAME DEPARTMENT_ID
1 Massimo Ugues 1
2 Mazi Ugues 2
SELECT * FROM DEPARTMENT;
ID ADDRESS NAME
1 Via Gaber Le betulle
Итак, есть один Сотрудник, который не принадлежит ни одному Отделу.
Теперь мне нужнозагрузите Employee с идентификатором 2, а тот с DepartmentId = 2, которого нет на Db.
Итак, это запрос JPQL:
select e, department from Employee e left outer join e.department department where e.name = :name and department.id = :id
И это относительный sqlсгенерировано:
SELECT t0.ID, t0.NAME, t0.SURNAME, t0.DEPARTMENT_ID, t1.ID, t1.ADDRESS, t1.NAME FROM {oj EMPLOYEE t0 LEFT OUTER JOIN DEPARTMENT t1 ON (t1.ID = t0.DEPARTMENT_ID)} WHERE ((t0.NAME = ?) AND (t1.ID = ?))
bind => [Mazi, 2]
Проблема не в соединении, а в t1.ID = ?
.Это должно быть t0.ID =?где t0 - таблица сотрудников.
Есть идеи, как заставить ее работать?
С уважением.Massimo