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à Ae B(in una relazione uno-a-uno, ma non applicato o modellato da JPA). Aha una PK composita, che viene impostata manualmente, e ha anche un campo IDENTITY generato automaticamente recordId. Questo recordIddovrebbe essere scritto ad un'entità Bcome chiave esterna a A. Sto risparmiando Ae Bin un'unica transazione. Il problema è che il valore generato automaticamente A.recordIdnon è 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?