我最近回答了一个关于为什么PolymorphismType.EXPLICIT不将查询限制为特定请求的类的问题。我对答案的研究让我质疑为什么会有这样的注释,以及它有什么好处。
Hibernate 文档说明了以下内容:
显式多态性意味着类实例将仅由显式命名该类的查询返回。命名类的查询将只返回映射的子类的实例。
...然而,正如在 Stack Overflow 上多次提到的那样,措辞有点令人困惑。人们想用它来避免子类表之间的连接,但它并没有按照他们期望的方式完成工作。具体来说,如果您有 A->B 类层次结构,并且 A 标记为EXPLICIT
,则对 A 的查询也将检索 B 实例,因为它们是“...子类映射”。
我相信这个注释的使用方式是标记 B EXPLICIT
。然后对 A 的查询将只返回 A的实例,不仅针对实际类型为 A 的对象,还针对类型 B 的对象,只填充共享字段。这使得注释可用于轻量级模式。
所以我的问题是: 除了启用轻量级模式之外,这个注释还有其他好的用例吗?作为第二个问题,是否有任何关于它如何与各种InheritanceType
值交互的文档,特别是每个类的子类和表?