我有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 = ?
嵌套子选择是否有任何限制?
答案 0 :(得分:0)
已发现问题 - 映射到数据库的实体具有getHashCode()的自定义实现,该实现基于包括集合在内的所有内部成员的值来计算哈希代码。当Hibernate为实体B调用getHashCode()时,集合C尚未被读取,但是获取散列是必要的。因此,执行单独的查询以获取当前对象B的C集合...