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 = {
    }
}
  1. В браузере нажмите, чтобы увидеть ребенка
  2. Нажмите Редактировать
  3. Ничего не меняйте и нажимайте Обновить
  4. В консоли вы увидите, что это замечание грязное, но для версии отправляется обновление 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]

-

Почему это так? Как отключить ненужное обновление? Внешние ключи будут обновляться при каждом обновлении другого простого свойства, даже если они остаются неизменными?

(хм... я не вижу кнопки для загрузки небольшого примера проекта...)

Большое спасибо и замечательного вам дня:-)

0 ответов

Другие вопросы по тегам