2016-08-19 3 views
0

子レコードを削除するという類似の問題はありますが、orphanRemovalアノテーションは使用できません。KOTLIN orphanRemoval not working

以下

モデルクラスのコンストラクタでの私のコードのサンプルです:

@OneToMany(orphanRemoval = true, cascade = arrayOf(CascadeType.ALL)) 
@JoinColumn(name = "categoryId", nullable = false) 
var books: List<BOOK> = emptyList() 

CRUD カスケード= arrayOf(CascadeType.ALL)とは完璧に動作しますが、orphanRemoval =真を追加するときを「ONE-TO-MANY」アノテーションに変換すると、それ以上動作しなくなり、次のように例外がスローされます。

org.hibernate.HibernateException:=「すべて削除 - 孤児が」もはや所有 エンティティインスタンスによって参照された カスケードのコレクション:

データベースから永久に子レコードを削除するorphanRemovalを加える目的。

答えて

0
@OneToMany(cascade = arrayOf(CascadeType.ALL), orphanRemoval = true, fetch = FetchType.EAGER) 
@JoinColumn(name = "categoryId", nullable = false) 
var books: MutableList<BOOK> = mutableListOf() 
    set(value) { 
     field.clear() 
     field.addAll(value) 
    } 
有効です。
0

このような例外の原因である可能性がありますについて説明しブログの記事があります:http://www.onkarjoshi.com/blog/188/hibernateexception-a-collection-with-cascade-all-delete-orphan-was-no-longer-referenced-by-the-owning-entity-instance/

あなたは、このように親エンティティによって参照されていない元のコレクションを残しセッターを経由して新しいコレクションを設定しています。これはHibernateではうまく動作せず、何をすべきか混乱します。

booksので、私はあなたのコード内のいくつかの場所で、あなたが所望の値にそれを設定していることを前提としvar、ないvalです。ブログ記事から推論を仮定すると、移動するための方法であるべき可変タイプのfinalフィールドを使用して、ここで

val books: MutableList<BOOK> = mutableListOf()