Java Hibernate:获取完整数据库的许多滚动结果(如子查询策略)
我尝试以最少的请求数转储整个数据库的内容 因此,如何使用query.scroll启用子查询获取? 我的目标: 我有如下数据库: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
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 = ? ...