私は問題があり、解決策を見つけることができませんでした。私は双方向の多対多のアノテーションを持っています。JPA ManyToMany双方向インサート
- 項目
- 部
- item_section
アイテム部:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "item_section",
joinColumns = {
@JoinColumn(name = "item", nullable = false, updatable = false)},
inverseJoinColumns = {
@JoinColumn(name = "section", nullable = false, updatable = false)})
private Set<Section> sections;
区間部分:
IはDB(mariaDB)にこのテーブルを持っています@ManyToMany(fetch = FetchType.EAGER, mappedBy = "sections")
private Set<Item> items;
問題:
私は最初のいくつかのセクションを作成します。私はこのセクション内のアイテムを作成したいと思うよりも。だから私はItemのインスタンスを作成し、いくつかの既存のSectionsをセットに追加します(セクションはDAOから取得します)。 Itemを永続化すると、itemおよびsection_sectionテーブルのレコードが作成されます。しかし、私がDAOから影響を受けるセクションの一部を取得し、アイテムの繰り返しを設定した場合、データベースの変更はここにはありません。セクションのインスタンスは挿入前と同じ状態です。
何が間違っていましたか?
PS:私はEclipseLinkはを使用しますが、私は@クリスは私がutimately持続が、方向の片側がすでに存在していると呼ば言ったように、それは
SOLUTION
面白いではないと思います。カスケードは定義されていないため、永続セクションは永続化されず、マージされませんでした。だから私のstalessための最善の解決策は、およびJTAソリューションを使用したマージの代わりの項目を持続し、セクションのコレクションにMERGEカスケードを追加...助けに来た
おかげで誰もが、特に@クリス
リレーションの両側を設定しても構いませんか?あなたが永続性コードを提示しないので、それ以上のコメントは不可能です。 –
ありがとう@NeilStocktonしかし、あなたが望む持続コードは何ですか?私は単にentityManager.persist(item)を実行します。ここで、entityManagerはEntityManagerのインスタンスであり、itemはItemのインスタンスです。あなたは何を意味しているのですか?_ \t リレーションの両側を設定するのは気になりましたか?_私は両方とも設定していませんでしたか? – Majlanky
永続性コードを掲示しない(あなただけがクラスを投稿した)ので、リレーションの両側を(永続化するオブジェクト内に)設定するかどうかは誰も言いません。だから、あなたは "item"を持続して呼び出す...あなたは他のオブジェクト(セクション)でpersistを呼び出しましたか?あなたがするまで誰もコメントすることはできません –