我们有一个遗留表,我们不想在其中添加鉴别器列。没有鉴别器列,是否有可能有每个层次结构的表?
我的父类代码:
@Entity
@Table(name = "SHAPE1")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "Discriminator",
discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "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;
public Rectangle() {
}
public Rectangle(int id, String shapeName, int length, int breadth) {
super(id, shapeName);
this.length = length;
this.breadth = breadth;
}
// getters and setters
}
你可以在我上面的例子中看到,我必须使用鉴别器。
SINGLE_TABLE
是一种非常强大的策略,但有时,尤其是对于遗留系统,您无法添加额外的鉴别器列。为此,Hibernate引入了鉴别器公式的概念:@DiscriminatorFormula
是@DiscriminatorColumn
的替代品,并使用SQL片段作为鉴别器解析的公式(无需专用列)。
@Entity
@DiscriminatorFormula("case when forest_type is null then 0 else forest_type end")
public class Forest { ... }
我有一个基于hibernate策略的实体层次结构,并且我在application.yml中设置了。 当我使用h2db运行测试时,我得到“null not allowed for column”。 当指令创建形状表时,它将鉴别器列设置为,因此得到“null not allowed for column”。 是否有一种方法可以使用DDL-AUTO强制区分器列为null?
我们有一个遗留表,我们不希望通过添加鉴别器列来改变它。有没有可能有不带鉴别器列的tablePerHierarchy。 下面是我的父级和子级代码 @Table(名称=“Shape1”)@Inheritation(策略=InheritanceType.Single_Table)@DiscriminatorColumn(名称=“Discriminator”,discriminatorType=discr
我的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。