【发布时间】:2011-12-12 13:21:46
【问题描述】:
我遇到了对象模型和 Hibernate 的问题。我希望将整个模型存储为单个表。
我已经尝试了以下方法,但是当我要求 Hibernate 生成 SQL 创建文件时,它会创建 3 个表而不是只有 1 个。类层次结构可能看起来很奇怪,但它当然是脱离上下文的 :)
尝试 1:
@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "CATEGORY", discriminatorType = DiscriminatorType.STRING, length = 10)
@Table(name = "the_table")
public abstract class A {}
@MappedSuperclass
@DiscriminatorValue(value = "B")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING, length = 20)
public abstract class B extends A {}
@Entity
@DiscriminatorValue(value = "X")
public class X extends B {}
@Entity
@DiscriminatorValue(value = "Y")
public class Y extends B {}
@Entity
@DiscriminatorValue(value = "Z")
public class Z extends B {}
尝试 2: 我们到了那里,不是它创建了 1 个表,而是没有生成鉴别器列。有人能发现错误吗?
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "CATEGORY", discriminatorType = DiscriminatorType.STRING, length = 10)
@DiscriminatorFormula(value = "CATEGORY || '_' || TYPE")
@Table(name = "the_table")
public abstract class A {}
@Entity
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING, length = 20)
public abstract class B extends A {}
@Entity
@DiscriminatorValue(value = "B_X")
public class X extends B {}
@Entity
@DiscriminatorValue(value = "B_Y")
public class Y extends B {}
@Entity
@DiscriminatorValue(value = "B_Z")
public class Z extends B {}
【问题讨论】:
标签: java hibernate single-table-inheritance