当前位置: 首页 > 面试题库 >

InheritanceType.JOINED中的鉴别器

弓玉书
2023-03-14
问题内容

是否可以强制休眠将歧视符列用于继承的html" target="_blank">继承类型?根据JPA2.0规范,这应该可行,但是我无法在休眠状态下实现。

例:

@Inheritance(strategy = InheritanceType.JOINED)
@ForceDiscriminator
@DiscriminatorColumn(name="TYPE")
@Entity
public class Parent

@Entity
@DiscriminatorValue("C")
public class Child extends Parent

使用hibernate.hbm2ddl.auto create时,这甚至都不会在表PARENT中创建列TYPE。

我知道InheritanceType.JOINED可以在不定义鉴别符列的情况下工作,但是它是非常无效的,因为在使用鉴别符列中的信息时,休眠需要在父对象和所有子对象之间创建联接,而不仅仅是父对象和一个孩子之间的联接。


问题答案:

我已经使用SINGLE_TABLEDiscriminator和SecondaryTableon子类来完成此操作。IE浏览器

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE")
@Entity
public class Parent

@Entity
@DiscriminatorValue("C")
@SecondaryTable(name = "child", pkJoinColumns = {@PrimaryKeyJoinColumn(name="id", referencedColumnName = "id")})
public class Child extends Parent

当您添加新的子类时,您将添加一个包含相关扩展数据字段的新表。



 类似资料:
  • 问题内容: 我有一个简单的JOINED文件层次结构: 如您所见,所有子表所做的就是共享Documents表中的相同ID。除此之外,还会添加一列,并且不会添加任何新属性。(还要注意,在层次结构中还有两个其他具体的子表,由和表示不相关。) 这是上述表的映射: Document.java : SystemDocument.java : ExternalDocument.java : 后者应映射到Docu

  • Discriminator 是一种 schema 继承机制。 他允许你在相同的底层 MongoDB collection 上 使用部分重叠的 schema 建立多个 model。 假设你要在单个 collection 中记录多种 event, 每个 event 都有时间戳字段,但是 click 事件还有 URL 字段, 这时你可以用 model.discriminator() 实现上述要求。 此函

  • 引用OpenAPI 2.0模式对象或Swagger 2.0模式对象,并将字段定义为: 增加了对多态性的支持。鉴别器是用于区分继承此架构的其他架构的架构属性名称。使用的属性名称必须在此架构中定义,并且必须位于属性列表中。使用时,该值必须是此架构或继承它的任何架构的名称。 我的困惑/问题: 对我来说,它究竟在继承或多态性中扮演什么角色是不明确的。能不能请一些人用一个工作示例来解释,说明它到底是做什么的

  • 我们有一个遗留表,我们不希望通过添加鉴别器列来改变它。有没有可能有不带鉴别器列的tablePerHierarchy。 下面是我的父级和子级代码 @Table(名称=“Shape1”)@Inheritation(策略=InheritanceType.Single_Table)@DiscriminatorColumn(名称=“Discriminator”,discriminatorType=discr

  • 我有一个具体的JPA实体超类,它使用鉴别器列与映射,还有两个子类实体,它们用其他属性扩展了这个超类。 在某些情况下,我希望指定额外的鉴别器值,而不必为每个类型显式定义子类(也就是说,并不是每个“baseEntity”都指定支持子类/单独表的额外属性)。这种策略在数据库设计和Java类层次结构中都很有效,但是,Hibernate JPA不允许这样做,并抛出,因为没有映射到鉴别器的子类: 在本例中,我

  • 在@inheritage类型Joined中 我有班级成员、员工和学生 因此,当我保存Employee或Student记录,然后检索Person记录时,它给我的鉴别器列值为NULL,但在重新启动服务器后,它给我相应的值 如果我手动设置鉴别器列值的值,然后保存和检索,那么它会给我这个值(我需要手动设置鉴别器列值吗?)那么使用鉴别器列有什么好处呢 为什么我不应该使用一个具有列类型的employee和st