为什么EclipseLink为连接的继承策略添加了鉴别器列?

Pio*_*ski 7 jpa eclipselink

我正在使用JOINED继承策略与EclipseLink JPA实现.我注意到EclipseLink正在将鉴别器列(默认为DTYPE)添加到数据库模式中.我明白,一个表继承策略需要一个鉴别器,但为什么JOINED策略呢?

EclipseLink需要此列,因为删除后我遇到了错误.是否出于性能原因添加了此列?我对此并不特别高兴,因为从数据库模式的角度来看,这一列只是不必要的混乱.

基于Hibernate的JPA没有做任何类似的事情.

cle*_*tus 2

连接表继承

在连接表继承中,每个类共享根表中的数据。此外,每个子类都定义了自己的表来添加其扩展状态。以下示例显示两个表 PROJECT 和 L_PROJECT,以及两个类 Project 和 LargeProject:

...

鉴别器列决定类型以及要使用的连接表,因此您需要在父表中使用鉴别器列。

  • 确切地说,这就是我想理解的:为什么 EclipseLink 使用这个鉴别器列 - 没有必要,JOINED 策略是基于类之间的外键关联。JPA 规范表示鉴别器对于 JOINED 策略是可选的 - 例如 Hibernate JPA 没有使用它 - 我想了解使用它的优点是什么,就像 EclipseLink 所做的那样。 (4认同)