当使用Hibernate table-per-class时,如何防止基类的表创建?

时间:2013-10-25 17:01:27

标签: java hibernate

我有两个类:一个BaseClass和一个扩展BaseClass的ExtendedClass。我想使用Hibernate将ExtendedClass保存到单个数据库表中,我希望它还能保留BaseClass中的所有字段。

我想我想使用每个类的表范例,但是我不希望Hibernate为BaseClass创建一个DB表(我也不想将@Id添加到BaseClass)。有没有办法压制这个?

我正在做这样的事情:

@Entity
class BaseClass {
  int value1;
}

@Entity
@Table(name="extendedClasses")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
class ExtendedClass extends BaseClass {
  @Id long id;
  int value2;
}

我希望数据库有一个这样的表:

table extendedClasses
(
 long id
 int value1
 int value2
)

3 个答案:

答案 0 :(得分:3)

如果将@Entity放在基类上,则必须定义一个id,这将在数据库中生成一个表。

@Entity替换@MappedSuperclass会产生所需的结果。

答案 1 :(得分:2)

尝试将基类标记为抽象

@Entity
abstract class BaseClass {
  int value1;
}

答案 2 :(得分:-1)

要阻止hibernate在DB中创建表,请将其添加到persistence.xml

<property name="hibernate.hbm2ddl.auto" value="validate" />

我不知道你的基本和特定情况。子课。