1

MyContentには の Map がありFootnote、 に戻る外部キーでFootnoteある列があります。残念ながら、 a を含む でmyを保存すると、次のエラーがスローされます。content_idContentContentfootnoteMapFootnote

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は、コンテンツ アイテムは保存されていないことに注意してください。

4

2 に答える 2

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ます。

于 2012-08-23T14:43:16.033 に答える
0

まず第一に、双方向の関係の両側を一貫した状態に保つのはあなたの責任であることに注意してください。つまり、 a を追加するときはFootnote、適切Contentに設定する必要もありcontentIdます。

実行しても失敗する場合は、データベース スキーマと Hibernate マッピングが一致していない可能性があります。column には not null 制約がありますcontent_idが、そのような制約が存在することを Hibernate に通知するマッピングはありません。試してみてください@ManyToOne(cascade=CascadeType.ALL, optional = false)

于 2012-08-23T14:36:39.107 に答える