Grails4: dynamicUpdate: внешний ключ многие-к-одному обновляется, даже не будучи грязным
Я работаю с этой конфигурацией в application.groovy:
grails.gorm.default.mapping = {
id (generator: "identity")
// send only the dirty fields to the database for updating
dynamicUpdate (true)
dynamicInsert (true)
}
Класс домена:
package test
class Patient {
Integer id
Integer version
String familyName
String givenName
Patient father
Patient mother
static constraints = {
familyName (maxSize: 60)
givenName (maxSize: 60)
father ()
mother ()
}
static mapping = {
table 'patient'
father (column: "father_id", sqlType: "int4")
mother (column: "mother_id", sqlType: "int4")
}
def beforeUpdate () {
println('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
println('Record dirty? ' + this.isDirty())
println('Dirty properties: ' + this.dirtyPropertyNames)
println('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
}
}
bootstrap.groovy:
package test
class BootStrap {
def init = { servletContext ->
Patient father = new Patient(familyName: 'Patient', givenName: 'Father').save()
Patient mother = new Patient(familyName: 'Patient', givenName: 'Mother').save()
Patient child = new Patient(familyName: 'Patient', givenName: 'Child', father: father, mother: mother).save()
}
def destroy = {
}
}
- В браузере нажмите, чтобы увидеть ребенка
- Нажмите Редактировать
- Ничего не меняйте и нажимайте Обновить
- В консоли вы увидите, что это замечание грязное, но для версии отправляется обновление sql, папа-папа и папа-мать - думал, что папка-папка и папка-мать не изменены.
beforeUpdate XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Запись грязная? ложный
Грязные свойства: []
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2019-08-07 13: 04: 03.936 DEBUG --- [nio-8080-exec-4]
org.hibernate.SQL:
/* update
test.Patient */ update
patient
set
version=?,
father_id=?,
mother_id=?
where
id=?
and version=?
2019-08-07 13: 04: 03.938 TRACE --- [nio-8080-exec-4] ohtype.descriptor.sql.BasicBinder: параметр привязки [1] как [INTEGER] - [1]
2019-08-07 13: 04: 03.938 TRACE --- [nio-8080-exec-4] ohtype.descriptor.sql.BasicBinder: параметр привязки [2] как [INTEGER] - [1]
2019-08-07 13: 04: 03.938 TRACE --- [nio-8080-exec-4] ohtype.descriptor.sql.BasicBinder: параметр привязки [3] для [INTEGER] - [2]
2019-08-07 13: 04: 03.939 TRACE --- [nio-8080-exec-4] ohtype.descriptor.sql.BasicBinder: параметр привязки [4] как [INTEGER] - [3]
2019-08-07 13: 04: 03.939 TRACE --- [nio-8080-exec-4] ohtype.descriptor.sql.BasicBinder: параметр привязки [5] как [INTEGER] - [0]
-
Почему это так? Как отключить ненужное обновление? Внешние ключи будут обновляться при каждом обновлении другого простого свойства, даже если они остаются неизменными?
(хм... я не вижу кнопки для загрузки небольшого примера проекта...)
Большое спасибо и замечательного вам дня:-)