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

我尝试了一些方法:自己创建 2 个ScrollResult和映射关系,替换 hibernate 的PersistentSet

这是工作 !但我不确定这是一个好习惯......而且它需要大量数据库的临时内存。

对这种做法有什么建议吗?

于 2013-02-21T19:46:31.680 回答