我遇到了对象模型和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 {}

===============>>#1 票数:2 已采纳

删除@MappedSuperclass并尝试。 此外,您不能在单个层次结构中将@Inheritance标记两次 - 只使用一个。

如果要使用多列作为鉴别器,请使用@DiscriminatorFormula

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorForumula("CATEGORY || '_' || TYPE")
public abstract class A 

@Entity
@DiscriminatorValue(value = "B_X")
public class X extends A {}

@Entity
@DiscriminatorValue(value = "B_Y")
public class Y extends A {}

@Entity
@DiscriminatorValue(value = "B_Z")
public class Z extends A {}

  ask by smox translate from so

未解决问题?本站智能推荐:

1回复

单表继承和关系

我正在尝试找到此问题的解决方案: 数据库中有一个表( code_list ),其中包含所有code_list enum的数据。 假设我们有一个Affiliate ,可以有一个AffiliateType和LanguageCode 。 我们将所有这些都放在code_list表中,其
1回复

Hibernate继承单表

我正在尝试使用数据库表“ persons”实现单个表的Hibernate继承策略。 我有一个家庭,其中有丈夫,妻子,孩子清单和其他囚犯清单。 每个人可能是许多家庭的成员(即丈夫可能是一个家庭的丈夫,而另一个家庭的孩子)。 人是所有人的共同阶级: 子类,其他类和父类是相同的
2回复

每个类的Hibernate继承表和单个表混合

我正在开发在线网上商店,并且需要有关Hibernate映射的帮助。 我有以下继承: 我想要的是: 1)ID,名称,描述等公共字段将在@MappedSuperclass BaseProduct中。 2)乐器类型 (吉他,鼓)将具有针对这些乐器类型的共同字段。 3)最后,具体类
3回复

我可以删除Hibernate单表继承中的discriminator列吗?

我们对应用程序中的每个表使用单表继承。 这允许同一应用程序堆栈的不同实例与相同的DAO一起工作,而它们的实体可能略有不同,可能包含该实例特有的信息。 抽象类定义基本表结构,如果该实例需要,扩展定义其他列: 申请A: 申请B: 现在,DAO可以使用应用程序A和B的Cli
2回复

Hibernate-一对一关系单表继承

我有3个实体BaseFoo , FooAbc , FooAbcDetail 。 FooAbc扩展了基本实体BaseFoo 。 我正在尝试在FooAbc和FooAbcDetail之间FooAbc一对一的关系。 当项目启动时,Hibernate抛出: org.hibernate
3回复

Hibernate:是否可以将多级继承映射到单个表?

我有以下继承层次结构: 我想坚持使用单表继承,所以我注释了类: 当我尝试保存VerySpecificTask类的对象时,我收到一个错误: 我错了什么? 是否可以将多级继承映射到单个表? 编辑:这是一个蹩脚的错误,我已经很快解决了,所以我删除它以免弄乱这个问题。
4回复

Hibernate,单表继承和使用来自超类的字段作为鉴别器列

我有以下类型的hibernate实体层次结构的类。 我想要有两个具体的子类Sub1Class和Sub2Class 。 它们由MappedSuperClass定义的鉴别器列( field ) MappedSuperClass 。 有一个抽象的实体类EntitySuperClass ,由其他实
1回复

Hibernate HT_临时表ON JOINED继承,从Hibernate 3.4.0.GA迁移到5.1

我正在尝试将应用程序从Hibernate 3.4.0.GA迁移到Hibernate 5.1,在完成java代码所需的更改后,当我部署应用程序时,我正在观察Hibernate如何尝试创建HT_表 (全局临时) ,每个@Inheritance注释实体一个。 在Google上搜索我发现了为什么要
1回复

Hibernate继承SingleTable子类联接

Ive与Hibernate合作已经有几个星期了。 好吧,这是一个非常有用的工具,但我无法解决以下任务: 表: 在Java中我有3个班级 有两种类型的实例,其中“项目”可以但不一定总是应归为“捆绑包”。 “捆绑包”中至少有一个“物品” 和: 在运行时无法调
1回复

使用SingleTable进行Hibernate继承

我尝试使用hibernate 5.2实现单表继承。 基类 作者类扩展PropertyOwner: Composer类扩展了PropertyOwner: 人员类别: 物业类别 我期望表结构如下: 但不幸的是,它使用以下语句为Author和Compo