1

簡単にするために、ここに私の単純化されたモデルがあります:

私は2つのエンティティを取得しました:

@entity
public class Student {
int id;
School school
...
}

学校も実体です

@entity
public class School {
int id;
...
}

テキストファイルから大量のデータを取得しようとしています。一部の生徒は同じ学校インスタンスを持っています。同じ名前の複数の学校をデータベースに入れたくないので、同じ学校の2人の異なる生徒が作成しないようにしながら、各生徒を生徒データベースに保存することを目標としています。私の学校のデータベースに2つのエントリ。

問題は、生徒を永続化しようとすると、「分離されたエンティティが永続化に渡されました」というエラーが発生することです。休止状態に、生徒クラスの学校がすでにデータベースに存在し、それを使用する必要があることを通知するにはどうすればよいですか。代わりは?

ありがとう

4

3 に答える 3

3

でマップし@ManyToOne(cascade=ALL)ます。

「同じ名前」では不十分ですが、同じIDを使用する必要があります。Schoolこれを機能させるには、オブジェクトをStudentに設定する前に、オブジェクトがDBから取得されていることを確認する必要があります。

于 2012-05-30T14:39:32.707 に答える
0

セッションにはmerge()というメソッドがあります。saveOrUpdate();の代わりにそれを使用してください。

于 2012-05-30T14:38:43.247 に答える
0

アソシエーションがすでに設定されていると仮定します。

永続化されたStudentエンティティで作業していることを確認してください。学生エンティティを検索し、学校->学生を検索から返された学生エンティティに設定します。

entity.find(Student.class、student_id)

それ以外の場合は、上記を実行する前に、関連付けに注釈が付けられていることを確認してください。

于 2012-05-30T14:48:35.497 に答える