我的Content的Map为Footnote,而Footnotecontent_id列为回溯到Content的外键。不幸的是,用包含ContentfootnoteMap保存我的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.


我一定缺少进行这项工作所需的注释,但是我无法弄清楚它是什么。

这是我的JPA映射:

public class Content implements EntityModel, Serializable {
    @OneToMany(mappedBy="contentId", cascade=CascadeType.ALL)
    @MapKey(name="number")
    @OrderBy("number ASC")
    private Map<Integer, Footnote> footnoteMap;

    ....
}

public class Footnote implements EntityModel, Serializable {
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "content_id", referencedColumnName= "id")
    private Content contentId;

    ....
}


*更新*

请记住,添加Footnote时尚未保存内容项。

最佳答案

首先,请注意,将双向关系的双方保持一致状态是您的责任,即,在Footnote中添加Content时,还应适当设置其contentId

如果您这样做了,但仍然失败,则可能是数据库模式与Hibernate映射不匹配。请注意,content_id列具有非null约束,但是映射中没有任何内容告诉Hibernate这样的约束存在。尝试@ManyToOne(cascade=CascadeType.ALL, optional = false)

10-08 01:23