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

使用一个实体(及其主键)作为另一个实体的ID

童花蜂
2023-03-14
问题内容

因此,我不确定如何问这个问题,因为似乎很容易找到这个问题的答案。

我有3张桌子;ContentHeader,ContentType1和ContentType2。ContentHeader具有主自动递增键。ContentType1和ContentType2都维护指向ContentHeader的主键的外键。这些外键也是它们各自表的主键。

CREATE TABLE contentHeader (contentID INT AUTO_INCREMENT PRIMARY KEY, ...) ENGINE=InnoDB;

CREATE TABLE contentType1 (contentID INT PRIMARY KEY, FOREIGN KEY (contentID) REFERENCES contentHeader (contentID), ...) ENGINE=InnoDB;

CREATE TABLE contentType2 (contentID INT PRIMARY KEY, FOREIGN KEY (contentID) REFERENCES contentHeader (contentID), ...) ENGINE=InnoDB;

我创建了四个类:

@Entity
public class ContentHeader {

  @Id
  @GeneratedValue
  protected int contentID;

  ...
}

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Content {

  @Id
  @OneToOne
  protected ContentHeader contentHeader;

  ...
}

@Entity
public class ContentType1 extends Content {
  ...
}

@Entity
public class ContentType2 extends Content {
  ...
}

尝试生成架构时,这将引发空指针。我很确定我只是缺少一些简单的东西。我注意到PrimaryKeyJoinColumn,但是我不确定这是否是我需要的。


问题答案:
You can create a composite id class that only have the ContentHeader:

@Embeddable
public class ContentKey implements java.io.Serializable {

    @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
    @JoinColumn(name = "ID", updatable = true)
    private ContentHeader header;
    // ...
}

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Content {

    @Id
    public ContentKey  getContentKeyId()
    // ...
}

这应该够了吧。



 类似资料:
  • 我使用SpringBoot web和Morphia DAO(使用MongoDB)创建了一个REST web服务。 正如我在MySQL上使用Hibernate时所做的那样,我希望使用通用实体、存储库和endpoint,以便只需设置实体、继承存储库和服务,并将生成的CRUD用于REST调用。 它几乎完成了,但是我在使用吗啡对我的实体进行通用更新时遇到了一个问题。到目前为止,我所看到的一切都在谈论手动设

  • 我的WebApi应用程序有一个小问题。当我将新实体添加到我的数据库时,会出现这个问题。 实体: 要在其中向数据库中添加新赌注实体的代码: 在此位置,将我的实体添加到DB中(DB:我的SQL) 调用save方法时,代码会引发以下异常: 附加“WebCar. Domain. Entities. Lot”类型的实体失败,因为另一个相同类型的实体已经具有相同的主键值。如果图形中的任何实体具有冲突的键值,则

  • 我有一个实体VCenterDistributedVirtualPortgroup,它扩展了VCenterNetwork,两个实体在实体VCenterFolder中处于OneToMany关系中。我得到以下错误:

  • 我将JPA与Hibernate和QueryDSL(v.4.0.5)一起使用。我拥有以下实体: 如何找到与给定标记集匹配的所有文章?我想我应该从以下几点开始: 其中,ce应为集合表达式。很明显,我不知道如何设置这个。 有什么解决方案吗?

  • 问题内容: 我正在尝试使用Hibernate的@Formula批注从另一个表中检索实体。给出以下代码: Result类如下所示: 但是,在尝试加载测试实体时,出现错误“找不到列“ TEST0_.RESULTDATE””。我还尝试了其他一些涉及@JoinFormula批注的事情,但是没有成功。我也遇到了这个答案,这似乎表明我在做的事情应该起作用,但事实并非如此。我该如何工作? 问题答案: 因此,我找