2009-09-10 19 views
61

Che cosa fa realmente lo CascadeType.REFRESH?Cosa fa in realtà CascadeType.REFRESH?

La definizione perché è

Quando ci rinfreschiamo un'entità tutte le entità detenute in questo campo rinfrescare troppo

ma cosa significa questo in pratica? Qualcuno potrebbe per favore darmi un semplice esempio?

risposta

95

Le singole descrizioni CascadeType possono essere un po 'confuse, ma c'è un modo semplice per capirlo dal caso generale.

Per qualsiasi valore CascadeType, significa che se l'operazione X viene invitato un'istanza utilizzando l'interfaccia EntityManager, e che esempio ha riferimenti ad altre istanze di entità, e che associazione ha CascadeType.X definito, allora l'operazione EntityManager sarà anche essere applicato a tale entità associata.

Così EntityManager.refresh() è definito come:

aggiornare lo stato dell'istanza da database, sovrascrivendo le modifiche apportate all'entità, se presente.

Quindi, se entità A ha un riferimento a un'entità B, e che il riferimento è annotata con @CascadeType.REFRESH, e EntityManager.refresh(A) è chiamato, quindi EntityManager.refresh(B) è implicitamente chiamato anche.

+0

So che questo è un vecchio post, ma usando il tuo esempio di A e B di cui sopra, se l'istanza di B è attualmente indipendente, sarebbe un CascadeType.PERSIST causa B per diventare persistente? Sto usando l'implementazione JPA di Hibernate. – Andy

+3

Ho risposto alla mia domanda. La risposta è no. È necessario chiamare Salva sull'oggetto affinché diventi persistente. – Andy

3

Retrieval da Refresh: oggetti gestiti possono essere ricaricati dal database utilizzando il metodo di aggiornamento:

Il contenuto dell'oggetto gestito in memoria viene scartato (comprese le modifiche, se presente) e sostituiti dai dati che è recuperato dal database. Ciò potrebbe essere utile per garantire che l'applicazione si occupi della versione più aggiornata di un oggetto entità, nel caso in cui possa essere stata modificata da un altro EntityManager da quando è stato recuperato.

Fonte: http://www.objectdb.com/java/jpa/persistence/retrieve