У меня есть наследие базы данных и некоторые таблицы имеют составные идентификаторыГорм и составные ключи в ассоциациях
class Client {
String id
static hasMany = [
settings: Setting
]
static mapping = {
id column: 'client_id', generator: 'assigned'
}
}
class Setting {
Client client
String nodeId
String ccyPairPattern
Character qualifier
static mapping = {
id composite: ['client', 'nodeId', 'pattern', 'qualifier']
}
}
Я хочу, чтобы удалить запись из Горм ассоциации:
client.get('1').removeFromSettings(settingToRemove)
// settingToRemove.delete(flush: true)
// delete-orphans does not help
Это всегда вызывает исключение после промывки
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) :
Это происходит потому, что метод removeFrom * устанавливает свойство client в null и генерирует запрос к delete with clientId = null, поскольку клиент является частью составного ключа
Какое наилучшее решение в этом случае. Похоже, что GORM имеет плохую поддержку составных клавиш или неправильное отображение.
Также модульные тесты GORM показывают странное поведение при настройке выше. Если добавить equals/hashcode в класс настроек, он будет иметь повторяющиеся строки после сохранения строк. –