当前位置: 首页 > 知识库问答 >
问题:

Hibernate中没有鉴别器列的tablePerHierarchy策略

胡越泽
2023-03-14

我们有一个遗留表,我们不希望通过添加鉴别器列来改变它。有没有可能有不带鉴别器列的tablePerHierarchy。

下面是我的父级和子级代码

@Entity

@Table(名称=“Shape1”)@Inheritation(策略=InheritanceType.Single_Table)@DiscriminatorColumn(名称=“Discriminator”,discriminatorType=discriminatorType.String)@DiscriminatorValue(值=“s”)

公共类形状{

@Id
@Column(name = "Shape_Id")
int shapeId;
@Column(name = "Shape_Name")
String shapeName;

public Shape() {

}

public Shape(int id, String shapeName) {
    this.shapeId = id;
    this.shapeName = shapeName;
}
// getters and setters

}

下面是我的孩子班级

@Entity

@DiscriminatorValue(value=“r”)公共类矩形扩展形状{

@Column(name = "Rectangle_Length")
int length;
@Column(name = "Rectangle_Breadth")
int breadth;

// getters and setters

public Rectangle() {

}

public Rectangle(int id, String shapeName, int length, int breadth) {
    super(id, shapeName);
    this.length = length;
    this.breadth = breadth;
}

// getters and setters

}

你可以在我上面的例子中看到我必须使用鉴别器。如果有人知道有没有discriminator列的tablePerHierarchy,请帮助我

共有1个答案

任飞龙
2023-03-14

SINGLE_TABLE是一个非常强大的策略,但有时,特别是对于遗留系统,您不能添加额外的鉴别器列。为此,Hibernate引入了鉴别器公式的概念:@DiscriminatorFormula是@DiscriminatorColumn的替换,并使用SQL片段作为鉴别器解析的公式(不需要有专门的列)。

@Entity@DiscriminatorFormula(“case when forest_type为null then 0 else forest_type end”)公共类森林{...}

 类似资料:
  • 我们有一个遗留表,我们不想在其中添加鉴别器列。没有鉴别器列,是否有可能有每个层次结构的表? 我的父类代码: 我的孩子班: 你可以在我上面的例子中看到,我必须使用鉴别器。

  • 我的SINGLE_TAB继承Hibernate配置中出现了一个奇怪的情况,@DiscriminatorColumn似乎被忽略了,而查询总是默认返回到'dtype'列。这就像我在完全没有包含注释(默认列名为'dType')时看到的行为一样。 基本实体: 子类实体: 我还需要访问每个对象中的鉴别器值本身(postType字段)。我仍然有相同的行为,即使我移除它,所以它似乎不是原因。 当我试图通过JPA

  • 问题内容: 是否可以强制休眠将歧视符列用于继承的继承类型?根据JPA2.0规范,这应该可行,但是我无法在休眠状态下实现。 例: 使用hibernate.hbm2ddl.auto create时,这甚至都不会在表PARENT中创建列TYPE。 我知道InheritanceType.JOINED可以在不定义鉴别符列的情况下工作,但是它是非常无效的,因为在使用鉴别符列中的信息时,休眠需要在父对象和所有子

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

  • 我有一个与鉴别器列连接的继承映射。 父实体: 附注。我使用的是hibernate 5.0.9.Final。

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