当前位置: 首页 > 面试题库 >

使用注释在Hibernate中映射多级继承

巫马松
2023-03-14
问题内容

考虑此问题中列出的情况:

在Hibernate中映射多级继承

如何使用注释而不是hbm文件完成此映射?


问题答案:

您具体遇到什么问题?通过联接的子类映射类层次结构非常简单:

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class A implements Serializable { ... }

@Entity
public class B extends A { ... }

@Entity
@PrimaryKeyJoinColumn(name="A_ID")
public class C extends A { ... }

@Entity
@PrimaryKeyJoinColumn(name="B_ID")
public class D extends B { ... }

更新 (基于Michal的评论)。

如果您确实要使用区分符(并且您应该有 充分的
理由这样做),则可以通过将基于类的表策略与辅助表进行混合来实现:

@Entity
@Table(name="A_table")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="entity_type")
@DiscriminatorValue("A")
public class A implements Serializable { ... }

@Entity
@SecondaryTable(name="B_table")
public class B extends A { ... }

@Entity
@SecondaryTable(name="C_table", pkJoinColumns={
    @PrimaryKeyJoinColumn(name="A_ID", referencedColumnName="ID")
))
public class C extends A { ... }

@Entity
@SecondaryTable(name="D_table", pkJoinColumns={
    @PrimaryKeyJoinColumn(name="B_ID", referencedColumnName="ID")
))
public class D extends B { ... }

这种方法的缺点是,您必须为每个映射的属性显式指定表:

public class D extends B {
  @Column(table="D_table")
  private String someProperty;

  ...
}


 类似资料:
  • 问题内容: 目前,我有这样的结构: 它使用联接表与每个子类一个表映射。由于历史原因,我也使用了一个鉴别器,因此当前情况如《 Hibernate手册》第9.1.3节所述 。 问题: 如何为这样的结构扩展映射: 我可以在hibernate映射中吗?什么我需要S’ 问题答案: 未测试, 但根据发布的链接(如果您使用的是hibernate3)

  • 我想让hibernate生成一些带有外键的表等等。我将给出我希望hibernate生成的查询的一个示例: 所以这个查询应该由hibernate通过注释生成。与此对应的类是: 有关中的应映射到的内容的示例(中的每个助记符在中只有一个值): 正如您所看到的,我在文档的帮助下做了一些尝试,但是我不能让Hibernate生成外键。如果有人能告诉我这个类需要的注释和值,那就太好了,这样我就可以自己为其他类做

  • 如何在Grails 3.0.1中映射带有注释的域类? 以下步骤对我不起作用。 步骤1.我使用Grails 3.0.1创建了一个新应用程序()。 步骤2。如Hibernate注释映射中所述,我在src/main/com/books/Book中创建了一个新类。groovy(也是groovy) 步骤3。然后通过将相关条目添加到grails-app/conf/Hibernate/Hibernate,向Hi

  • 问题内容: 我的Java模型上有一个枚举类型,我想映射到数据库中的表。我正在使用“hibernate注释”,但我不知道该怎么做。由于我搜索的答案比较旧,我想知道哪种方法最好? 提前致谢 问题答案: 除了注释,您还需要其他东西吗?例如,以下枚举: 可以这样使用和注释: 您可以使用批注的enum属性指定枚举应如何在数据库中持久化。指定该枚举将作为整数值保留。在这里,设置为将永久保存为0,保留为1,依此

  • 我有三个表:用户,角色,董事会。每个用户可以有多个板,但在一个板中用户只能有一个角色。我创建了三个类并添加了注释: Hibernate创建一个新表,如下所示: 我使用的是hibernate 4.2.2。

  • 1. 前言 本节课程和大家一起学习继承映射。通过本节课程的学习,你将了解到: 什么是继承映射; 实现继承映射的 3 种方案。 2. 继承映射 学习继承映射之前,需要搞清楚什么是继承映射? 继承是 OOP 中的概念,其目的除了复用代码之外,还用来描述对象在现实世界中的关系。 为了更好地讲解继承映射,咱们再在数据库中创建一张老师表。数据库中多了一张表,按照使用 Hibernate 的套路,理所当然应该