Vorrei sapere quale approccio adottare per impedire a Hibernate 4.3.4 (con Spring e Hibernate Vaidator) di svuotare le entità sporche. Nel mio codice, utilizzo un'implementazione manuale di Hibernate Validator (un metodo .validate() all'interno dell'istanza stessa), che viene chiamato appena prima di salvare un'entità. Il metodo validate() restituisce un elenco di errori, se presenti, altrimenti viene chiamato un Session.update() per memorizzare l'entità, seguito da un commit della transazione.Impedire la sessione di sospensione dallo svuotamento/archiviazione di entità dirty non valide
Questo funziona, ma quando l'istanza stessa viene manipolata (i parametri di registrazione/richiesta sono impostati nell'entità) l'entità e la sessione di Hibernate corrispondente sono contrassegnate come "dirty" e l'entità viene archiviata con la successiva Session.flush().
Nel mio caso, vorrei avere un controllo esplicito sulle entità che possono essere memorizzate e impedire la memorizzazione di qualsiasi entità sporca, come potrei ottenere questo?
EDIT:
so di poter regolare manualmente questo sfrattando un'entità (o compensazione e ripristina un'entità tramite una fusione), ma questo non è il mio scopo. Piuttosto che dover regolare manualmente la persistenza, vorrei avere la situazione di offset che nessuna entità che non è stata salvata esplicitamente e di cui la transazione non è stata esplicitamente impegnata, non verrà memorizzata nel database (ad esempio tramite un intercettore?).
Ciao Kostja, questa è la soluzione "inversa", ma non quello a cui sto mirando. Quello che voglio è che la situazione sia viceversa, solo le entità esplicitamente salvate e impegnate possono essere svuotate - di default, senza distaccarle, se possibile. – Marius
Certo, puoi modificare il contesto di persistenza in entrambi i modi. Si prega di consultare la modifica. – kostja
Quasi lì, ma ancora non completamente ciò che sto cercando di ottenere. Non voglio davvero preoccuparmi delle entità sporche e regolare la persistenza nel modo in cui descrivi, ma piuttosto, per esempio tramite un intercettore, mai (automatico) svuotare quelle entità quando non sono esplicitamente salvate e la transazione non è stata esplicitamente impegnata per impostazione predefinita, senza reintrodurli nella sessione di ibernazione, né doverli sfrattare prima del lavaggio. – Marius