实体无法保存外键实体

时间:2012-08-23 13:52:29

标签: java jpa

我的Content的地图位置为FootnoteFootnote的{​​{1}}列有一个返回content_id的外键。不幸的是,使用包含Content的{​​{1}}保存Content会引发以下错误:

footnoteMap

我必须遗漏一些需要注释才能完成这项工作,但我无法弄清楚它是什么。

这是我的JPA映射:

Footnote

*更新*

请注意,添加ERROR: Cannot insert the value NULL into column 'content_id', table 'CMT_DEV.dbo.footnote'; column does not allow nulls. INSERT fails. SEVERE: org.springframework.dao.DataIntegrityViolationException: Cannot insert the value NULL into column 'content_id', table 'CMT_DEV.dbo.footnote'; column does not allow nulls. INSERT fails.; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: Cannot insert the value NULL into column 'content_id', table 'CMT_DEV.dbo.footnote'; column does not allow nulls. INSERT fails. 的点,内容项尚未保存。

2 个答案:

答案 0 :(得分:0)

首先,请注意,您有责任保持双向关系的双方都处于合作状态,即当您向Footnote添加Content时,您还应该适当地设置其contentId

如果你这样做但它仍然失败,那么也许这是数据库模式和Hibernate映射之间的不匹配。请注意,content_id列具有非空约束,但映射中没有任何内容告诉Hibernate存在这样的约束。试试@ManyToOne(cascade=CascadeType.ALL, optional = false)

答案 1 :(得分:0)

你需要这样的东西......

public void addFootnote(Footnote footnote) {
    if (footnote == null) {
        throw new IllegalArgumentException("Null argument not allowed");
    }
    footnote.setContent(this);
    footNoteMap.put(<KEY_OF_MAP>, footnote);
}

将确保为content个实例填充Footnote