Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:获取完整数据库的许多滚动结果(如子查询策略)_Java_Hibernate_Jpa_Fetching Strategy - Fatal编程技术网

Java Hibernate:获取完整数据库的许多滚动结果(如子查询策略)

Java Hibernate:获取完整数据库的许多滚动结果(如子查询策略),java,hibernate,jpa,fetching-strategy,Java,Hibernate,Jpa,Fetching Strategy,我尝试以最少的请求数转储整个数据库的内容 因此,如何使用query.scroll启用子查询获取? 我的目标: 我有如下数据库: Employee (1) ------ (0..n) Address 员工类别: ... @OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, fetch = FetchType.LAZY) @Fetch(FetchMode.SUBSELECT) public Set<Address> g

我尝试以最少的请求数转储整个数据库的内容

因此,如何使用query.scroll启用子查询获取?

我的目标: 我有如下数据库:

Employee (1) ------ (0..n) Address
员工类别:

...
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@Fetch(FetchMode.SUBSELECT)
public Set<Address> getAddresses() { ... }
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*”的查询


谢谢

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

这是工作!但我不确定这是否是一个好的实践…而且它需要大量的数据库临时内存

对这种做法有什么建议吗

select * from employee
-- and n times :
select * from address where employee_id = ? or employee_id = ? ...