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

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

我有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()

// ...

}

这应该够了吧。

以上是 使用一个实体(及其主键)作为另一个实体的ID 的全部内容, 来源链接: utcz.com/qa/418224.html

回到顶部