2012-01-13 9 views
0

オブジェクトをリレーションに追加して永続化するにはどうすればよいですか?Grails更新の参照

私はその

registrationInstance.addToActionType(id:id) 

ような何かを行う場合、私は例外

Unique index or primary key violation: "PRIMARY_KEY_E7 ON PUBLIC.ACTION_TYPE_REGISTRATIONS(ACTION_TYPE_ID, REGISTRATION_ID)"; SQL statement: insert into action_type_registrations (action_type_id, registration_id) values (?, ?) [23001-147] 

EDIT取得:

私は

registrationInstance.addToActionType(ActionType.get(id)) 

を記述する場合、私は同じエラーを取得し、しかしそれは持続する - だからどのようにそのエラーを取り除くことはできますか?

EDIT2:

私はオブジェクト削除しようとすると:

registrationInstance.removeFromActionType(ActionType.get(id)) 

を私は次のエラーをreceve(時々、ないオールウェイズ)

Eindeutiger Index oder Primarschlüssel verletzt: "PRIMARY_KEY_E7 ON PUBLIC.ACTION_TYPE_REGISTRATIONS(ACTION_TYPE_ID, REGISTRATION_ID)" Unique index or primary key violation: "PRIMARY_KEY_E7 ON PUBLIC.ACTION_TYPE_REGISTRATIONS(ACTION_TYPE_ID, REGISTRATION_ID)"; SQL statement: update action_type_registrations set action_type_id=? where registration_id=? and action_type_idx=? [23001-147] 

答えて

1

あなたがオブジェクト自体を追加する必要があります関係:

registrationInstance.addToActionType(ActionType.load(id)) 
registrationInstance.save() 
+0

私もこれを試しましたが、同じエラーが発生します –

+2

代わりに 'ActionType.load(id)'を使用します。データベースからインスタンスを取得するのではなく、プロキシを作成するだけです。あなたは外来キーを設定しているだけなので、それを読み込んで投げるよりもずっと安いです。 –

1

インスタンスがすでにコレクション内にあることが検出されないようです。実現可能なhashCodeequalsメソッドをActionTypeに実装して、Hibernateはそれがすでに存在していることを検出して、ACTION_TYPE_REGISTRATIONS結合テーブルに重複レコードを作成しようとしません。

+0

これも役に立たなかった - 同じエラー –

関連する問題