запрос гибернации с объединением - PullRequest
0 голосов
/ 07 мая 2018

У меня есть две сущности следующим образом:

@Entity
@Table(name = "tax")
public class TaxReturn {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(name = "period")
    private String fillingPeriod;
    @Column(name = "created_date")
    private LocalDateTime dateCreated;
    @Column(name = "total_tax")
    private int totalTax;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "tax_id", nullable = false)
    private List<Employee> employees;
}

@Entity
@Table(name = "emp")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "other_name")
    private String firstName;
    @Column(name = "surname")
    private String lastName;
    @Column(name = "tax_amount")
    private int taxAmount;
}

Приведенная выше информация представляет собой возврат, который состоит из списка сотрудников, в которых указано, сколько налога было уплачено. Возвратная сущность содержит общую сумму всех сотрудников. Мне нужно написать запрос на HQL, который будет получать сотрудника, используя идентификатор возврата и идентификатор сотрудника. Ниже написано то, что я написал, но я получаю сообщение об ошибке, поскольку оно не генерирует правильный mysql.

session.getTransaction().begin();
Long taxReturnId = 5L;
Long empId = 4L;
Query query = session.createQuery("select p.employees from TaxReturn p left join Employee e where p.id = '5' and e.id = '4'");
List<Employee> employeeList = query.list();
System.out.println(employeeList.get(0).toString());
session.getTransaction().commit();

Правильный ли запрос для записи?

Спасибо, Ashley

1 Ответ

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

Запрос должен быть:

select p.employees from TaxReturn p left join p.employees e where p.id = '5' and e.id = '4'

N.B. часть соединения отличается от вашей, так как вы должны указать поле, отображающее отношение при присоединении.

Также вы можете просто вернуть TaxReturn и оттуда получить List из Employee:

Query query = session.createQuery("select p from TaxReturn p left join p.employees e where p.id = '5' and e.id = '4'");
List<Employee> employeeList = query.singleResult().getEmployees();

Также я заметил, что вы наметили отношения нетрадиционным способом, как обычно однонаправленное отображение выполняется на стороне ManyToOne, а не наоборот. С этим также связана некоторая проблема с производительностью, ознакомьтесь с Article для получения более подробной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...