我有 3 个实体和它们的嵌套集合,如下所示:
实体 A 包含 B 的集合,实体 B 包含 C 的集合。
而且我需要获取实体 A 的完整对象图列表。当我将 B 集合和 C 集合的获取策略设置为“子选择”时,实际上只有 B 的集合是通过单个查询读取的。每个 C 集合都是通过每个 B 类型实体的单独查询读取的 - 就像在那里“选择”获取策略一样。
所以我期待以下内容:
选择 ... 从 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))
但实际上得到:
选择 ... 从 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 = ?
嵌套子选择是否有任何限制?
最佳答案
问题已经确定 - 映射到数据库的实体具有 getHashCode() 的自定义实现,它根据包括集合在内的所有内部成员的值计算哈希码。当 Hibernate 为实体 B 调用 getHashCode() 时,尚未读取集合 C,但需要获取哈希值。因此执行单独的查询以获取当前对象 B 的 C 集合...
关于hibernate - 子选择获取策略不适用于 Hibernate 中的嵌套集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12685489/