我在 jpa 中有一个单表继承层次结构,如下所示:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(catalog = "onedb", name = "content")
@DiscriminatorColumn(name = "oid_content_type", discriminatorType = DiscriminatorType.INTEGER)
public abstract class Content implements Serializable {
...
@OneToMany(cascade = CascadeType.PERSIST)
@JoinColumn(name = "oid_content", referencedColumnName = "oid_content")
private List<ContentKeyword> keywords;
...
@Entity
public abstract class RichMedia extends Content {
...
@OneToMany(mappedBy="richMedia", cascade =CascadeType.PERSIST)
private Set<RichMediaFile> richMediaFiles;
...
}
@Entity
@DiscriminatorValue("1")
public class RichMediaImage extends RichMedia {}
可以看出 Content 是最顶层的基类,RichMedia 是 RichMediaImage 的基类,Content 有一个 ContentKeyword 列表,定义如下:
@Entity
@Table(catalog = "onedb", name="content_keyword")
public class ContentKeyword implements Serializable {
...
@ManyToOne
@JoinColumn(name = "oid_content")
private Content content;
}
我构造了一个 RichMediaImage 并在其上设置了 ContentKeyword 列表并尝试保留整个对象。单个表,内容插入新行并生成新 id,但是当插入到 content_keyword 表中时,该新 id 未在 sql jpa 生成中提供:
insert into onedb.content_keyword (oid_content, keyword) values (NULL, 'test')
投掷
MySQLIntegrityConstraintViolationException: Column 'oid_content' cannot be null
我将不胜感激任何指针。