1

я использую Grails 3.2:Найти isDirty() для дочерних элементов

class Training{ 
    boolean clientChanged = false 
    static transients = ['clientChanged'] 

    static hasMany = [clients:User] 
    //... 

    def beforeUpdate(){ 
     clientChanged = this.isDirty('clients') 
    } 

    def afterUpdate(){ 
     if(clientChanged && section.clients) 
      numberOfAbsentClients = section.clients.size() - (clients.size()?:0) 
    } 
} 

isDirty() не работает для hasMany ассоциаций. как я могу справиться с этим?

ответ

1

Коллекции обрабатываются несколько иначе. В зависимости от того, используете ли вы Hibernate или один из других реализаций GORM вам нужно проверить, если коллекция является org.hibernate.collection.spi.PersistentCollection (для Hibernate) или org.grails.datastore.mapping.collection.PersistentCollection (для MongoDB/Neo4j/и т.д.)

Интерфейс PersistentCollection имеет isDirty() метод, который вы можете использовать, чтобы проверить, была ли ассоциация изменена. Так что-то вроде:

if(clients instanceof PersistentCollection && clients.isDirty()) { 
    ... 
} 

Будет ли это делать.

+0

работает как очарование. благодаря! –

Смежные вопросы