如何在休眠中执行非多态 HQL 查询?

2022-09-01 12:54:24

我使用的是Hibernate 3.1.1,特别是,我使用的是HQL查询。

根据文档,Hibernate的查询是多态的:

类似: 的查询不仅返回 的实例,还返回子类(如 )的实例。from Cat as catCatDomesticCat

如何查询 Cat 的实例,但查询其任何子类的实例?

我希望能够做到这一点,而不必明确提及每个子类。

我知道以下选项,并且不觉得它们令人满意:

  1. 在查询后手动筛选实例,或者:
  2. 在鉴别器列上手动添加 WHERE 子句。

对于Hibernate来说,允许用户决定查询是否应该是多态的,这是有意义的,但我找不到这样的选项。

提前致谢!


答案 1

类映射中使用。这将导致查询仅返回命名类的实例,而不返回其子类。polymorphism="explicit"

隐式多态性意味着类的实例将由命名任何超类或已实现的接口或类的查询返回,并且类的任何子类的实例将由命名类本身的查询返回。显式多态性意味着类实例将仅由显式命名该类的查询返回。


答案 2
SELECT cat FROM Cat cat WHERE cat.class='cat'

其中,该值是类的鉴别器值。'cat'Cat

如果您使用的是 ,请尝试 )(类的名称)TABLE_PER_CLASScat.class='Cat'

这并不完全是鉴别器列上的 where 子句,因为此类查询将失败(鉴别器列仅在本机查询中可用)。


推荐