Dre*_*rew 4 entity annotations hibernate jpa
所以,我不知道如何问这个问题,因为似乎应该很容易找到这个问题的答案。
我有 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;
Run Code Online (Sandbox Code Playgroud)
我创建了四个类:
@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 {
...
}
Run Code Online (Sandbox Code Playgroud)
尝试生成模式时,这会抛出一个空指针。我很确定我只是缺少一些简单的东西。我注意到了 PrimaryKeyJoinColumn,但我不确定它是否是我需要的。
您可以创建一个只有 ContentHeader 的复合 id 类:
@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()
// ...
}
Run Code Online (Sandbox Code Playgroud)
这应该够了吧。
| 归档时间: |
|
| 查看次数: |
5750 次 |
| 最近记录: |