Table 每个子类(不使用鉴别器)
Table per subclass (without using a discriminator)
在第 10.1.2 节中。 Table 每个子class 它讨论了通过跨多个表的一对一映射创建继承。
https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#inheritance-tablepersubclass
当 Internet 上的所有示例都在谈论 "Table per subclass" 时,他们实际上在谈论 10.1.3。 Table 每个子class:使用鉴别器。
我的问题是10.1.2怎么办。 Table 每个子class 知道在没有鉴别器列的情况下要实例化哪个 class。
如果答案是 hibernate 执行 3 个(或其他)额外查询来查找数据的位置,那么当鉴别器方法只保证 2 个查询时,您为什么要使用此方法。
如果您查看查询,它会包含某种类似下面的 switch 语句
select
account0_.id as id1_9_,
account0_.balance as balance2_9_,
account0_1_.checkLimitAmount as checkLim1_10_,
account0_2_.atmLimit as atmLimit1_11_,
case
when account0_1_.id is not null then 1
when account0_2_.id is not null then 2
when account0_.id is not null then 0
end as clazz_
from
INHERITANCE_JTND_ACCOUNT account0_
left outer join
INHERITANCE_JTND_CHECKING_ACCOUNT account0_1_
on account0_.id=account0_1_.id
left outer join
INHERITANCE_JTND_SAVINGS_ACCOUNT account0_2_
on account0_.id=account0_2_.id
所以它只做一个查询。 Hibernate 然后使用 clazz_
列来确定要实例化的内容。上面的查询来自 HSQLDB,对于其他数据库引擎可能有所不同。
打印 JPA/Hibernate 生成的 SQL 语句通常是个好主意(至少在您的本地环境中),因为有时您会对它生成的 DML 感到惊讶。
在第 10.1.2 节中。 Table 每个子class 它讨论了通过跨多个表的一对一映射创建继承。
https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#inheritance-tablepersubclass
当 Internet 上的所有示例都在谈论 "Table per subclass" 时,他们实际上在谈论 10.1.3。 Table 每个子class:使用鉴别器。
我的问题是10.1.2怎么办。 Table 每个子class 知道在没有鉴别器列的情况下要实例化哪个 class。
如果答案是 hibernate 执行 3 个(或其他)额外查询来查找数据的位置,那么当鉴别器方法只保证 2 个查询时,您为什么要使用此方法。
如果您查看查询,它会包含某种类似下面的 switch 语句
select
account0_.id as id1_9_,
account0_.balance as balance2_9_,
account0_1_.checkLimitAmount as checkLim1_10_,
account0_2_.atmLimit as atmLimit1_11_,
case
when account0_1_.id is not null then 1
when account0_2_.id is not null then 2
when account0_.id is not null then 0
end as clazz_
from
INHERITANCE_JTND_ACCOUNT account0_
left outer join
INHERITANCE_JTND_CHECKING_ACCOUNT account0_1_
on account0_.id=account0_1_.id
left outer join
INHERITANCE_JTND_SAVINGS_ACCOUNT account0_2_
on account0_.id=account0_2_.id
所以它只做一个查询。 Hibernate 然后使用 clazz_
列来确定要实例化的内容。上面的查询来自 HSQLDB,对于其他数据库引擎可能有所不同。
打印 JPA/Hibernate 生成的 SQL 语句通常是个好主意(至少在您的本地环境中),因为有时您会对它生成的 DML 感到惊讶。