在Hibernate中没有discriminator列的tablePerHierarchy策略

时间:2014-03-14 06:15:56

标签: java hibernate

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

以下是我的父类和子类代码

@Entity

@Table(name =" SHAPE1") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name =" Discriminator",discriminatorType = DiscriminatorType.STRING) @DiscriminatorValue(值=" S")

public class Shape {

@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") public class Rectangle extends Shape {

@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

}

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

1 个答案:

答案 0 :(得分:0)

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

@Entity @DiscriminatorFormula(“当forest_type为null然后为0,否则为forest_type end”) 公共类Forest {...}