リクエスト数を最小限に抑えて、データベースのコンテンツ全体をファイルにダンプしようとしています。
したがって、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.scrollを使用して「query.find*」のクエリを実行するにはどうすればよいですか。
ありがとう