【问题标题】:Mixing Hibernate Inheritance Strategies混合 Hibernate 继承策略
【发布时间】:2020-11-23 15:08:42
【问题描述】:

在 C# 中,我们使用 ORM,让我们在每个子类/子类中指定要存储它的位置:

[MapInheritance(MapInheritanceType.ParentTable)]  //this means that store employee specific fields in person table
public partial class Employee: Person  
{}

我想在Java端使用相同的方法,但是在Hibernate中我们在父类中指定策略。我们有以下结构:在此处输入图像描述

我不想要基类的表。我想将人员和员工存储在用户表中。和客户在自己的表中。

但是hibernate在这方面似乎有不足之处,它要求所有分支都使用一个层次结构策略。我希望能够更改较低分支的政策。

如何在 jpa 或 hibernate 中实现这一点?

【问题讨论】:

  • 不是。您可以针对 joined + single-table strategies 解决此限制,但不适用于单表 + 每类表策略
  • 是的,这是可能的。你的尝试是什么?我有一个与你的 Base.java 相同的类,例如:Option.java、Application.java,它们扩展了 Base.java。结果表只是:选项和应用程序。这是你需要的吗?

标签: java hibernate jpa-2.1


【解决方案1】:

您可以使用 @MappedSuperclass

做到这一点

同一继承层次结构中允许有一个@MappedSuperclass 或多个@MappedSuperclass。

@MappedSuperclass
public class FirstMapped {
    @Id int id;
}

@MappedSuperclass
public class SecondMapped extends FirstMapped {
    String createdOn;
}

@Entity
public class MyTable extends SecondMapped {
    String myColumn;
}

这些类必须只创建一个表:MyTable,其中包含列:

  • 身份证
  • createdOn
  • 我的专栏

【讨论】:

  • 我相信:'我想将人员和员工存储在用户表中。和客户在自己的表中”是关于 OP 想要什么的非常明确的陈述,并且直接反对“这些类必须只创建一个表”
  • 我受此声明的指导:I don't want a table for base class。另一方面,我们都知道问题所有者有时不清楚他需要什么。最后我会等待他的反馈。
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 2011-04-24
相关资源
最近更新 更多