6

HibernateでPostgreSQLとSpringデータJPAを使用しています。リレーションに多くの子を追加することが非常に多いため、orphanRemoval=falseのリレーションOneToManyがあります。

親:

@OneToMany(mappedBy = "parent"、cascade = {CascadeType.ALL}、orphanRemoval = false、fetch = FetchType.LAZY)public Set getChildren(){子を返す; }

子:

@ManyToOne @JoinColumn(name = "parent_id")public Parent getParent(){return parent; }

オブジェクトを永続化またはマージするには、メソッドを使用します

Iterable <T> save(Iterable <extends T>エンティティ)

CrudRepositoryを形成します。すべての親に子のセットが含まれている親のリストを保存します。子テーブルには固有の制約があります。制約違反が発生した場合は、それを無視して、違反が発生する子を省略(永続化しない)しますが、制約違反が発生しないすべての子を挿入します。どうやってするか?

4

2 に答える 2

2

例外によってこれを汚く処理します。

  1. ここで問題が発生した場合は、データベースを更新してみてください。UniqueViolationExceptionをキャッチし、JDBCExceptionを見つけます。資格のあるデータベース例外にアップキャストし、壊れた子を見つけます。

  2. 親から子を削除します。

  3. 1に移動します。

于 2012-09-18T08:27:39.300 に答える
0

クリーンな方法は、unique-violation-exceptionsを生成するエンティティをフィルタリングすることです。そのエンティティをフィルタリングした後、適切なエンティティを保存できます。

例外は、実際には次のとおりに使用する必要があります。例外。

于 2012-09-18T05:36:34.627 に答える