Hibernate:当没有物理列或值用于区分实例时,鉴别器列如何工作?

Posted

技术标签:

【中文标题】Hibernate:当没有物理列或值用于区分实例时,鉴别器列如何工作?【英文标题】:Hibernate: How Discriminator Column works in case when there is no physical columns or value present for differentiating instance? 【发布时间】:2019-08-02 06:34:00 【问题描述】:

我试图理解对我来说是新的现有代码,因为我使用了 discrimnatercolumn 和值,它们在数据库中具有实际的物理列名称以及物理值,但是在这个现有代码中没有物理列或值,但它仍然存在正在工作。

@Table(name = "ADRESSE")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="DISC", discriminatorType=DiscriminatorType.STRING,length=20)
public class Address
 ID

数据库中没有名为 DISC 的列。这是否意味着它会根据 ID 进行区分?

@Table(name = "POST_ADRESSE")
@Indexed
@DiscriminatorValue(value = "POSTADRESSE")
public class PostAdresse extends Adresse 
  //Address1 Address 2

没有值名称 PostAdresse。没有名称为 PostAdresse 的列。唯一的共同点是 ID,在 Adresse 和 PostAdresse 中都很常见

当我们检查 (addresse instanceof postadresse);那么它在什么基础上区分并返回正确的对象,即它是如何工作的呢?

【问题讨论】:

【参考方案1】:

对于您的情况,@DiscriminatorColumn 无效,因为您的继承策略是 InheritanceType.JOINED

@DiscriminatorColumn 在继承策略为InheritanceType.SINGLE_TABLE 的情况下有效

【讨论】:

以上是关于Hibernate:当没有物理列或值用于区分实例时,鉴别器列如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

@IdClass 使用 JPA 和 Hibernate 生成“实例标识符已更改”

Spring Hibernate SQL Server - 更新列的问题

使用 Hibernate 进行不区分大小写的搜索

Hibernate之抓取策略

当对象很大时返回一个指针或值

当没有 Internet 连接时,Hibernate 给出错误错误,因为“当 'hibernate.dialect' 未设置时,访问 DialectResolutionInfo 不能为空”