Domanda

Il mio modello:

 public class Father {
  Set<Son> sons = new HashSet<Son>();
  String name = null;
  Date lastSonModifyDate = null;
  // ... other fields and setters/getters
 }
 public class Son {
  Father father = null;
  String name = null;
  Date lastModifyDate = null;
  // ... other fields and setters/getters
 }

Caso d'uso:

  1. C'è nel DB un oggetto Father con un oggetto Son associato (BIDIR).
  2. Carica da DB padre.
  3. Aggiornamento campo del nome per il padre.
  4. Aggiornamento campo del nome per il figlio.
  5. padre persistere.
aggiornamenti padre

Il mio primo intercettore rileva (onFlushDirty). Poi esegue l'onFlushDirty per il figlio. In questo caso, aggiorno son.lastModifyDate e anche father.lastSonModifyDate .

Quando l'esecuzione si conclude, tutti gli aggiornamenti vengono mantenute, tranne father.lastSonModifyDate . Credo che questo sia perché il padre è in sessione ed è stato aggiornato prima del figlio, in modo da questa entità sovrascrive le modifiche apportate nel metodo onFlushDirty per l'entità figlio.

Come avrei potuto raggiungere il mio marchio (set lastSonModifyDate del padre dal figlio intercettore)?

Grazie.

È stato utile?

Soluzione

Non è possibile. onFlushDirty () viene richiamato per gli elementi di raccolta dopo è stata invocata immobiliare e azione di aggiornamento (se presente) è già stato programmato.

C'è qualche motivo per cui non si può fare tutto quanto sopra nel tuo DAO invece di basarsi su intercettori? O al livello di database (mappatura entrambe le proprietà lastModifyDate come generato)?

Altri suggerimenti

è necessario eseguire l'override onCollectionUpdate per i soggetti che ha a cascata opzione. questo viene chiamato prima il suo essere in programma.

applausi ~

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top