2017-03-01 5 views
0

私は同じエンティティの別のオブジェクトを参照できるエンティティを持っています。データベース内のオブジェクトを削除したいとき、私はConstraintViolationを得ることができます。したがって、まず、削除するオブジェクトの参照を持つエンティティを検索し、値をnullに設定します。私はcriteriaBuilderでこれを行い、一括更新を行います。 その後、エンティティを削除します。次のselectステートメントで私はエラーを受け取りました:複数のEntityManagerでHibernateを使ってデータを削除する

org.hibernate.TransientPropertyValueException: object references an unsaved transient instance 

私はentityManagerの2つの異なるインスタンスを使用している可能性があります。最初のものは一括更新を行い、2番目のものはそのエンティティを削除します。 したがって、2番目のentityManagerがフラッシュするとどうなりますか?最初のentityManagerのデータもデータベースで変更されていますか?もしそうなら、データベース内のステートメントはどの順序で実行されますか? また別の間違いをしますか? ありがとうございました!

+0

あなたはcascadeTypeを使用する必要があります – Vaseph

+0

私は通常、そのようなデータを削除できないはずなので、ConstraintViolationを取得したいと思います。しかし、その特殊なケースでは、データベースからデータを削除することが許されるべきです。 しかし、何かを学ぶだけで、どのカスケードタイプが選択できるのでしょうか? – Markus

+1

CascadeTypeを使用できます.ALL – Vaseph

答えて

0

問題は一括アップデートでした。休止状態のキャッシュは、データベースの変更を認識しません。したがって、キャッシュ内の参照されたエンティティはデータベースと同等ではなく、クラッシュします。 まず、参照されたエンティティを更新してから、それが機能します。または、一括アップデートを「通常の」アップデートに変更して、データベースからすべてのエンティティをロードし、プロパティをnullに変更するように設定する必要があります。

関連する問題