Grails更新参考文献

时间:2012-01-13 14:40:41

标签: hibernate grails gorm

如何将一个Object添加到关系并保持它?

如果我这样做

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:

如果我尝试删除对象:

registrationInstance.removeFromActionType(ActionType.get(id))

我接受了错误(有时,不是总是)

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]

2 个答案:

答案 0 :(得分:1)

您必须将对象本身添加到关系中:

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

答案 1 :(得分:1)

看起来它没有检测到实例已经在集合中。为hashCode实现合理的equalsActionType方法,以便Hibernate可以检测到它已经存在,而不是尝试在ACTION_TYPE_REGISTRATIONS连接表中创建重复记录。