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

标签 hibernate

我有 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/

相关文章:

java - 计算满足特定条件的对象数量

java - NoSuchMethodError : org. springframework.beans.factory.xml.XmlBeanDefinitionReader

java - Hibernate 3.5.0-CR-2版本是否支持JPA2.0

java - Hibernate session 和垃圾收集器

java - 在@ManyToOne 端合并托管实体

java - hibernate @Formula/错误 : schema "FOO" does not exist

java - 如何从不是由spring创建的对象访问spring bean

java - Hibernate - 删除链接实体

json - java.lang.UnsupportedOperationException : Attempted to serialize java. lang.Class : org. hibernate.proxy.HibernateProxy

java - Hibernate:如何手动创建删除模式?