Hibernateは、エンティティがコレクションから削除されたときにDBレコードを削除しません

関連エンティティのコレクションからエンティティを削除するだけで、データベースレコードは削除されません。

例えば:

currentUser.getBooks().remove(thisBook);
userDAO.update(currentUser);

DBからレコードを削除しません

毎回明示的にbookDAOに行き、いつも session.delete(thisBook)と言う必要がありますか?私はHibernateがそれよりずっとスマートで、親エンティティが保存または更新されたときにカスケードチェックを行います。

これをどうやって解決するのですか?

2
orphanRemovalをtrueに設定する必要があります。コレクションから要素を削除すると、その要素がdbから削除されます。
追加された 著者 Volodymyr Levytskyi,

3 答え

User エンティティの books コレクションからエンティティ Book を削除するだけで、2つのエンティティ( Book code> User )であり、 Book エンティティインスタンスではありません。

CASCADE 節もあなたが探しているものではありません。カスケードとは、 User インスタンスを削除したときに、 User books ブックインスタンスも同様に削除されます。

したがって、このコレクションからデータベースからは削除しないで getBooks()。remove(thisBook)を読んでください。

そして、もしあなたが session.remove(book)(またはあなたのDAOの中の施設)を使わなければならない場合は、その本を削除してください。

5
追加された

あなたの関係にカスケードタイプを指定する必要があります。

examples here: http://www.mkyong.com/hibernate/hibernate-cascade-example-save-update-delete-and-delete-orphan/

2
追加された
やった。私は何かを試した。 CASCADEは親の削除でのみ機能します。
追加された 著者 preslavrachev,
追加された 著者 unludo,

それはすべてあなたの書籍コレクションで定義したカスケード属性に依存します。

0
追加された
現在はDELETEですが、ALLを試しました。動作しません。
追加された 著者 preslavrachev,