2012-01-13 2 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] 

편집 : 나는

registrationInstance.addToActionType(ActionType.get(id)) 

내가 같은 오류를 얻을 작성하는 경우

, 그러나 그것은 지속됩니다 - 그래서 어떻게 그 오류를 없앨 수 있습니까?

EDIT2 : 나는 개체 제거하려고하면

하는 (때로는,하지에 allways)

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

이 역시 도움이되지 않았습니다 - 같은 오류 –

관련 문제