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 - 更新列的问题
当没有 Internet 连接时,Hibernate 给出错误错误,因为“当 'hibernate.dialect' 未设置时,访问 DialectResolutionInfo 不能为空”