我的Content
的地图位置为Footnote
,Footnote
的{{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.
的点,内容项尚未保存。
答案 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
。