gpt4 book ai didi

java - 如何使用鉴别器/继承来管理空实体和/或没有表的实体

转载 作者:行者123 更新时间:2023-12-01 15:33:20 25 4
gpt4 key购买 nike

我在其他网站(和这里)上问过几次,但我想我会再试一次,因为我真的没有找到答案。我对 hibernate 有点陌生,我害怕在 hibernate 论坛上发帖。我主要在 Hibernate 3.6 中使用 JPA 注释。

我有以下架构: Schema

所以基本上这是一个遗留数据库。提名是中心表格,我有 4 种特定类型的提名:

  1. 同事(仅使用 NOMINATION 表列作为属性)
  2. 团队(NOMINATION + TEAM_NOM 表)
  3. 想法(NOMINATION + IDEA_NOM 表)
  4. 成功(NOMINATION + SUCCESS_NOM 表)

所以我所做的是使用鉴别器(和继承)来建立它们的实体。例如:

这是实体提名:

  @Entity(name = "Nomination")
@Table(name = "NOMINATION")
@DiscriminatorColumn(name="CATEGORY_CODE", discriminatorType = DiscriminatorType.STRING, length = 1)
@Inheritance(strategy=InheritanceType.JOINED)

public abstract class Nomination extends AuditableEntity {

以下是我对团队、想法和成功实体进行编码的方式:

  @Entity(name = "TeamNom")
@Table(name = "TEAM_NOM")
@DiscriminatorValue("T")
@PrimaryKeyJoinColumn(name = "NOM_ID")

public class TeamNom extends Nomination {

现在,我为同事执行了以下操作:

  @Entity(name = "CoworkerNom")
@DiscriminatorValue("C")
@PrimaryKeyJoinColumn(name = "NOM_ID")

public class CoworkerNom extends Nomination {

正如你所看到的,我有一个大问题。 Hibernate 正在寻找一个名为“CoworkerNom”的表,但我的数据库中没有任何表。我尝试将“提名”放入表格,因为我没有想法,但从逻辑上讲,它给了我一个循环依赖性错误。

那么我如何处理这个没有表也没有属性的实体?其他实体显然工作正常。

最佳答案

在 hibernate 中,您将必须创建一个包含提名每个子类属性的表,因此实际上您将只用ID填充该表...我认为这背后的基本原理是这样的这样做的优点是,如果您希望将来使用特定属性扩展该子类,则无需对注释或架构进行太多更改即可实现。

关于java - 如何使用鉴别器/继承来管理空实体和/或没有表的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9283910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com