0

リクエスト数を最小限に抑えて、データベースのコンテンツ全体をファイルにダンプしようとしています。

したがって、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*」のクエリを実行するにはどうすればよいですか

ありがとう

4

1 に答える 1

0

私は何かを試しました: hibernateのPersistentSetを置き換えて、自分で2つのScrollResultとマップされたリレーションを作成します。

仕事です!しかし、それが良い習慣かどうかはわかりません...そしてそれはデータベースの一時的なメモリを大量に消費します。

この慣行について何かアドバイスはありますか?

于 2013-02-21T19:46:31.680 に答える