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

È stato utile?

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 o cascade=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=MERGEo cascade=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:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top