Hibernate: множество ScrollResults для получения полной базы данных (например, стратегия подзапроса)
Я пытаюсь создать дамп для полного содержимого базы данных с наименьшим количеством запросов.
Таким образом, как включить выборку подзапроса с query.scroll?
Мои объекты:
У меня есть база данных, как:
Employee (1) ------ (0..n) Address
Класс сотрудника:
...
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@Fetch(FetchMode.SUBSELECT)
public Set<Address> getAddresses() { ... }
Адресный класс:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "employee_id", nullable = false)
public Employee getEmployee() { ... }
Java-код:
session.createQuery("FROM Employee").scroll(ScrollMode.FORWARD_ONLY);
Ожидаемый:
Когда я использую метод query.find, я получаю:
select * from employee
select * from address where employee_id in (select employee_id from employee)
Но в полной базе данных есть OutOfMemoryError.
И когда я использую session.scroll, он использует пакетную выборку:
select * from employee
-- and n times :
select * from address where employee_id = ? or employee_id = ? ...
Таким образом, как я могу иметь запросы "query.find* с query.scroll
Спасибо
1 ответ
Я попробовал кое-что: создать 2 ScrollResult и сопоставленные отношения самостоятельно, заменяя PersistentSet hibernate.
Это работает! Но я не уверен, что это хорошая практика... И она занимает много временной памяти базы данных.
Любой совет по этой практике?