Stavo raccogliendo informazioni sul metodo flush (), ma non sono abbastanza chiaro quando usarlo e come usarlo correttamente. Da quello che ho letto, la mia comprensione è che il contenuto del contesto di persistenza verrà sincronizzato con il database, ovvero l'emissione di dichiarazioni in sospeso o l'aggiornamento dei dati dell'entità.
Ora ho ottenuto il seguente scenario con due entità A
e B
(in una relazione uno-a-uno, ma non applicato o modellato da JPA). A
ha una PK composita, che viene impostata manualmente, e ha anche un campo IDENTITY generato automaticamente recordId
. Questo recordId
dovrebbe essere scritto ad un'entità B
come chiave esterna a A
. Sto risparmiando A
e B
in un'unica transazione. Il problema è che il valore generato automaticamente A.recordId
non è disponibile all'interno della transazione, a meno che non faccio una chiamata esplicita di em.flush()
dopo la chiamata em.persist()
su A
. (Se ho un IDENTITY PK generato automaticamente, il valore viene aggiornato direttamente nell'entità, ma non è questo il caso qui.)
Può em.flush()
causare danni quando lo si utilizza all'interno di una transazione?