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.

Это работает! Но я не уверен, что это хорошая практика... И она занимает много временной памяти базы данных.

Любой совет по этой практике?

Другие вопросы по тегам