子选择提取策略不适用于Hibernate中的嵌套集合

时间:2012-10-02 06:30:57

标签: hibernate

我有3个实体和嵌套的集合,如下所示: 实体A包含B的集合,实体B包含C的集合。

我需要获取实体A的完整对象图列表。当我设置获取策略以“分选”B的集合和C的集合时,实际上只通过单个查询读取B的集合。每个C的集合都是通过每个B类实体的单独查询来读取的 - 就像获取策略在那里“选择”一样。

所以我期待以下内容:

select ... from A
select ... from B where a_id in (select id from A)
select ... from C where b_id in (select id from B where a_id in (select id from A))

但实际上得到:

select ... from A
select ... from B where a_id in (select id from A)
select ... from C where b_id = ?
select ... from C where b_id = ?
...
select ... from C where b_id = ?

嵌套子选择是否有任何限制?

1 个答案:

答案 0 :(得分:0)

已发现问题 - 映射到数据库的实体具有getHashCode()的自定义实现,该实现基于包括集合在内的所有内部成员的值来计算哈希代码。当Hibernate为实体B调用getHashCode()时,集合C尚未被读取,但是获取散列是必要的。因此,执行单独的查询以获取当前对象B的C集合...