1. ホーム
  2. Java

問題と解決策を持続させるために渡される分離された実体

2022-02-27 11:05:26

JPAのセーブオブジェクトでは、問題のようなエラーが発生することがありますが、これには2つの原因があります。

1. オブジェクトがidを自動生成するように定義されており、挿入時に書き込んだidが既にデータベースに存在している。

    インターネット検索はこのケースが多いのですが、個人的には、実際のプロジェクトでは、自分でidを書くことになる新しいオブジェクトを生成するのは珍しいケースを演じていると思うのです。

2. 私は実際にプロジェクトは、シナリオが発生しました:オブジェクトAとオブジェクトBの一対多の関係は、つまり、Aはセット<B>型のメンバーが含まれて、フロントエンドは、データの束を渡すには、背景には、これらのデータをBオブジェクトに組み立てて、データベースに保存し、生成オブジェクトはこのセットの下に設定します;B>メンバ。

しかし、いくつかの複雑な論理的な理由から、ここでは直接設定するデータベース保存成功したBオブジェクトを取るのではなく、List<B>(すなわち、アセンブリの先頭を取るために。オブジェクトの新しいフロントエンドから渡されたデータ)とデータベースのデータ比較によると、同じ主キーのビジネスが存在していたと見なされ、その後、Listの前面に設定されたIDを取り出す<B> 実際には、このBオブジェクトが主キーを設定するすでに存在しているが、オブジェクトはまだ(ハイバーネートのいくつかの状態については、デタッチ状態にある参照してください)、。 ハイバーネートの3つの状態を深堀りする を挿入するために、新しいオブジェクトとして保存されます。

表す図。

もちろん、解決策は、保存する新しいオブジェクトの代わりに、データベースから照会されたオブジェクトを使用することです。