建模单个子表/多个父表

2024-04-14

我正在努力对共享单个表(子表)的多个表(父表)之间的关系进行建模。

给定以下父表1(其他父表2,3等类似):

@Entity
@Table (name="parent1")
public class ParentEntity1 {

    @Id 
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    // relationship with child table

    @OneToMany(mappedBy = "parentId", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<ChildEntity> children;


    // other columns of parent 1


}

以及以下子表:

@Entity
@Table (name="children")
public class ChildEntity {

    @Id 
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    // points to the parent type; 1, 2, and so on
    @Column(name="parent_type")
    private Integer parentType;

    @Column(name="parent_id")
    private Integer parentId;

    // some other data that belongs to ChildEntity

}

在创建关系时如何保留一个父对象和多个子对象?请注意,父类型是子表中的一列,并且父 ID 和子 ID 都是自动生成的。


您应该做的是将 ParentEntity 实际附加到 ChildEntity。在 JPA 中,m:1 的这种关系是通过 @JoinColumn 实现的。您不需要将父类型存储在子实体中 - 这将是糟糕设计的标志。父级的类型应尽可能接近其实体。因此,只需将其放入该实体中即可:

@Entity
@Table (name="children")
public class ChildEntity {

    @Id Integer parentId;
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    @ManyToOne
    @JoinColumn(name="parent")
    private ParentEntity parent;

    // some other data that belongs to ChildEntity
    //all setters and getters / lombok

}

@MappedSuperclass
public abstract class ParentEntity {
    @OneToMany(mappedBy = "parentId", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<ChildEntity> children;    


    @Column(name="parent_type")
    private Integer parentType;

    //all setters and getters / lombok
}


@Entity
@Table (name="parent1")
public class ParentEntity1 extends ParentEntity {

    @Id 
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;    

    // other columns specific to parent 1

    //all setters and getters / lombok
}


@Entity
@Table (name="parent2")
public class ParentEntity2 extends ParentEntity {

    @Id 
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;    

    // other columns specific to parent 2

    //all setters and getters / lombok
}

为了让父母有几个孩子,你可以这样做:

ParentEntity pOne = new ParentEntity1();
ParentEntity pTwo = new ParentEntity2();

ChildEntity c1 = new ChildEntity();
ChildEntity c2 = new ChildEntity();
ChildEntity c3 = new ChildEntity();

Set<ChildEntity> childrenOne = new HashSet<>();
childrenOne.add(c1);
childrenOne.add(c2);

Set<ChildEntity> childrenTwo = new HashSet<>();
childrenTwo.add(c3);

pOne.setChildren(childrenOne);
pOne.setType(1);

// ... 
em.getTransaction().begin();
em.persist(pOne);
em.getTransaction().commit();
// ...

pTwo.setChildren(childrenTwo);
pTwo.setType(2);


// ... 
em.getTransaction().begin();
em.persist(pTwo);
em.getTransaction().commit();
// ... 

就这样。请注意,您永远不会实例化 ParentEntity 类(因为它是抽象的)。您可以有多个父表,其中每个父表通过 id 引用单个子表。此外,您可以通过继承 ParentEntity 将有关每个后续父实体类型的信息存储在其类中。我希望它能解决你的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

建模单个子表/多个父表 的相关文章

随机推荐

  • 通过 JPA 关系进行 Bean 验证

    我想使用 Bean Validation 来注释实体中的约束 现在的问题是 实体上的关系也会得到验证吗 例如 假设我有以下实体 Entity Table name css empresa public class Empresa exten
  • 如何在 PostgreSQL 8.4 中从 string_to_array() 返回一个元素?

    我想解析具有以下类型值的字段 DAVE EBERT CONSTRUCTION 139 LENNOX STREET SANTA CRUZ CA 95060 公司电话号码 831 818 3170 我想做一个这样的查询 Update mytab
  • tkinter 错误的屏幕距离“10 0”

    My goal is to pady this section marked with a red circle slighty down Snippet of my code supposed to pady the last label
  • C# 和 C++ 中 ++i 运算符的区别

    我用 C 和 C 编写了以下代码 int i 0 i 11 此 C 编译器出现错误后 The left hand side of an assignment must be a variable property or indexer 但是
  • 如何禁用 Identityserver4 的 SSL

    为了测试目的 我需要在 DotNet Core 2 中禁用 IdentityServer4 的 SSL TSL 我看过这个链接 禁用 Identityserver3 的 SSL https stackoverflow com questio
  • ActiveRecord 迁移未填充 Postgres 物化视图

    我有一个MATERIALIZED VIEW这是通过迁移创建的 class MyView lt ActiveRecord Migration def up ActiveRecord Base connection execute lt lt
  • 如何在 mongoose js 中嵌套相同的模式

    我正在尝试使用 mongoose js 嵌套模式 特别是sameschema 创建树状结构 在此配置中 一个文档只能有 1 个父文档 但同一文档可以是多个子文档的父文档 以下是我最初的处理方式 var mongoose require mo
  • 读写模式Python [重复]

    这个问题在这里已经有答案了 可能的重复 python open内置函数 模式a a w w 和r 之间的区别 https stackoverflow com questions 1466000 python open built in fu
  • CSS 图像遮罩叠加

    我正在尝试获取一个透明的 png 框架图像 将其悬停在 img 标签上 以在其上创建框架的外观 我尝试了多种不同的方法 但似乎都不起作用 我使用的最新方法是http www cssbakery com 2009 06 background
  • 如何在 Struts 2 验证框架中验证布尔值

    简单 我必须确保选中表单上的隐私复选框 我尝试使用表达式验证器 和字段表达式验证器 但它不起作用 有谁能够帮助我 您能提供更多信息吗 您是如何使用表达式验证器的 为什么它不起作用 看来这种方法应该很好用 需要考虑一些事情 您的布尔值是否同时
  • 硒,是否存在多种元素之一?

    以答案为基础如何使用 Selenium for Python 等待页面加载 https stackoverflow com questions 26566799 how to wait until the page is loaded wi
  • 如何获取 Mac(Cocoa 或 C)的电池电量(以 mWh(而非百分比)为单位)

    标题几乎解释了一切 我正在创建一个 Mac 应用程序 我需要电池电量具体单位为毫瓦时 不是百分比 最好用 C 或 Objective C 来做 Thanks 抱歉 但我认为硬件没有办法报告这一点 随着电池进入其生命周期 它会随着时间的推移而
  • 以 json 形式返回时排除某些字段

    我有一个 ASP NET Web API 应用程序 现在假设应用程序由 User 实体和 Post 实体组成 帖子是由用户编写的 因此每个帖子实体都包含对用户实体的引用 class Post public int Id get set pu
  • android 列表视图按钮

    我正在尝试在列表视图中添加一个按钮 但按钮没有显示 我正在使用 json 解析从我的服务器获取数据 我正在使用哈希图和列表视图 此外 我也无法在列表视图中添加按钮 这是我的代码 package acb xiynove import java
  • 使用 Open Graph API 阻止用户

    是否可以使用开放图谱 API 阻止 Facebook 上的用户 我不想阻止用户使用应用程序 但希望允许用户在我的应用程序中阻止 Facebook 好友 如果他们愿意 这与访问 Facebook com 并阻止用户一样 从而将他们隐藏在您的所
  • ADO 参数化查询不返回任何结果

    我正在使用此查询从经典 asp 页面中的 vbscript 获取一些结果 但它不会返回任何值 该页面是空白的 也没有错误 请问有什么建议吗 dim cmd admin no admin no request QueryString admi
  • Sammy.js 使用 &,? 读取路由

    需要的路线看起来像 routeName param1 aaaa param2 bbb 添加到萨米 routeName param1 param2 and routeName param1 param2 他们都不起作用 我自己一直在 Samm
  • AVAssetExportSession - 在 IOS 中加入 2 个 mp4 文件

    我正在尝试使用以下代码在 ipad 2 上将 2 个预先存在的 mpeg 4 视频连接在一起 void mergeTestVideos setup asset NSString firstassetpath NSString stringW
  • Spring Tool Suite 找到 spring-boot 集成测试配置并且不启动主应用程序

    我在使用 Spring Tool Suite 与 spring boot 时遇到了一些困难 我创建了一个自定义 Maven spring boot web application 其中包括多个 JUnit 测试 其中一个测试是集成测试 它具
  • 建模单个子表/多个父表

    我正在努力对共享单个表 子表 的多个表 父表 之间的关系进行建模 给定以下父表1 其他父表2 3等类似 Entity Table name parent1 public class ParentEntity1 Id Column name