Avere un caso in una delle mia classe di dominio che memorizziamo un campo transitorio a base di dati Mongo in PrimaDiInserire e DopoAggiornamento ganci che funziona perfettamente con i seguenti requisiti: -Come controllare IsDirty ('transient_fieldName') per i campi transitori in Grails
- Gli inserti funzionano bene senza alcun problema.
- Aggiornamenti funziona bene se c'è un campo transitorio non modificato
Il problema è IsDirty lavora per proprietà non transitori.
codice è il seguente:
class ResoruceInstance {
def configurationService
Status status
//Transient
Map<String, Object> configuration
static transients = ['configuration']
public Map<String, Object> getConfiguration() {
if(!configuration)
configuration = configurationService.get(id, CollectionConstants.RESOURCE_INSTANCE_IDENTIFIER)
return configuration
}
def afterInsert() {
configurationService.save(id, CollectionConstants.RESOURCE_INSTANCE_IDENTIFIER, configuration)
}
def afterUpdate() {
if(this.isDirty("configuration"))
configurationService.save(id, CollectionConstants.RESOURCE_INSTANCE_IDENTIFIER, configuration)
}
}
per gestire questo problema ho creato isDirtyMongo ('transient_field'). Funziona bene fino al momento in cui una proprietà non transiente viene modificata poiché afterUpdate viene chiamato solo per le proprietà transitorie.
ganciomodificata è la seguente:
def afterUpdate() {
if(this.isDirtyMongo("configuration"))
configurationService.save(id, CollectionConstants.RESOURCE_INSTANCE_IDENTIFIER, configuration)
}
boolean isDirtyMongo(String property){
//return whether is dirty or not
}
Così, l'ultima domanda è come si può chiamare un gancio aggiornamento per le modifiche dei campi transitori pure.
Qualsiasi aiuto sarebbe molto apprezzato.
Per quanto ne so, il campo transitorio in sospensione non persiste, quindi è impossibile conoscere il valore dopo averlo collegato. Nell'evento di ibernazione, il campo transitorio è solo una cosa nulla. – dgregory
Accetto! Ma ho il caso di più database in cui voglio convalidare isDirty anche per i campi transitori. per esempio. isDirty ('config') dove config è transitorio. –