Hibernate: Unire in modo transale con un oggetto molti-a-uno?
-
28-10-2019 - |
Domanda
Ciao, lo so e testato prima che unione riatteggerà l'oggetto alla sessione impedendo un'eccezione di inizializzazione pigra quando l'oggetto non è più in sessione.
a.) Quindi ho qualche domanda.
Se pago-> cliente (in una relazione unidirezionale molti-to-one) e lo faccio
Pagamento pagamento = pagamento.class.cast (session.merge (oldpayment));
L'oggetto cliente sarà anche reattach in sessione o devo effettuare un'altra chiamata di unione per il cliente.
b.) Cosa succede se il pagamento-> cliente (relazione bidirezionale da molti a uno). Cosa succederebbe di.
c.) Che ne dici se ho una relazione con più di tre gerarchia.
Esempio: hotel -> pagamento -> cliente.
Se faccio hotel hotel = hotel.class.cast (session.merge (unmergehotel)), anche l'oggetto di pagamento e cliente si uniranno alla sessione?
Grazie
Soluzione
È definito dalle opzioni a cascata delle tue relazioni.
- Se la relazione è configurata per le operazioni di unione di Cascade, anche le entità a cui si stanno unendo l'entità venga unita, in modo che le modifiche apportate a queste entità prima dell'iscrizione vengano propagate al database.
- Altrimenti, queste entità verranno ricaricate dal database, pertanto eventuali modifiche apportate a queste entità prima di unione verranno scartate.
- Le relazioni pigre non inizializzate vengono ignorate.
Exceprt correlato dalle specifiche JPA (immagino che nativo Hibernate's Session
L'interfaccia offre la stessa semantica):
- Per tutte le entità Y referenziate dalle relazioni da X con il valore dell'elemento a cascata
cascade=MERGE
ocascade=ALL
, Y è unito in modo ricorsivo come y '. Per tutto questo Y referenziato da x, x 'è impostato su riferimento a y'. (Si noti che se x è gestito, allora x è lo stesso oggetto di x '.)- Se x è un'entità unita a x ', con un riferimento a un'altra entità y, dove
cascade=MERGE
ocascade=ALL
non è specificato, quindi la navigazione della stessa associazione da X 'produce un riferimento a un oggetto gestito y' con la stessa identità persistente di Y.Il fornitore di persistenza non deve unire i campi marcati pigri che non sono stati recuperati: deve ignorare tali campi durante la fusione.
Guarda anche: