【问题标题】:Hibernate : many ScrollResults to fetch full database (like subquery strategy)Hibernate:许多 ScrollResults 来获取完整的数据库(如子查询策略)
【发布时间】:2013-02-05 05:58:35
【问题描述】:

我尝试以最少的请求将完整数据库的内容转储到文件中。

因此,如何使用 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* 的查询”

谢谢

【问题讨论】:

    标签: java hibernate jpa fetching-strategy


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 2023-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 2013-08-13
      • 1970-01-01
      相关资源
      最近更新 更多