2015-01-26 10 views
5

Ho implementato i listener di eventi pre/post per gli eventi di Hibernate con un avvertimento che non sono stato in grado di superare. Ho un'entità Departments che ha una relazione molti-a-molti su un'entità Centers. Quando si assegna un nuovo Centro a un reparto, ho semplicemente invoco:Attivazione evento di aggiornamento (pre/post) quando modifica relazioni

oDepartment.addCenter(oCenter); 
entitySave(oDepartment); 

Quando questo accade, mi sarei aspettato Hibernate per innescare gli eventi PreUpdate e postUpdate da quando ho modificato l'entità. Tuttavia, non viene mai attivato a meno che non venga aggiornata anche una proprietà della colonna. L'aggiornamento solo di una proprietà di relazione non sembra attivare gli eventi di aggiornamento.

Guardando attraverso la sessione corrente di Hibernate, non riesco a trovare nulla che mi permetta di impostare una sorta di bandiera che potrebbe innescare questi eventi a fuoco.

Pensieri in un modo in cui avrei potuto incendiare questi eventi?

risposta

3

Hibernate non attiva eventi pre/postaggiornamento quando viene modificata una raccolta. Invece si innescherà

  • preCollectionUpdate/preCollectionRemove/preCollectionRecreate
  • postCollectionUpdate/postCollectionRemove/postCollectionRecreate.

Si tratta di un noto e vecchio bug, è possibile controllare HHH-2616 e here.

O si implementano questi listener o, come soluzione temporanea, è possibile forzare il postUpdate a essere chiamato a cambiare un altro campo su quell'entità.

Problemi correlati