specifica JPA è chiaro
Embeddables non può essere interrogato, persisteva, fuse indipendentemente dalla loro oggetto padre. Essi sono rigorosamente di proprietà privata (dipendente) oggetti
Si dovrebbe usare con cautela perché la sua durata di vita è delimitata dalla durata della istanza di entità proprietaria. Quindi, se persistono/merge/rimuovere l'istanza di entità possedere, tutti i suoi embeddables casi saranno persistito/fusione/rimossi
Supponiamo fai qualcosa come
/**
* Let's suppose owning contains SIX embeddables instances
*/
Owning owning = manager.find(Owining.class, owningId);
Così il vostro modificare solo la tua entità di proprietà a livello di vista e invia le tue modifiche. Di recuperare i all'entità proprietaria utilizzando
/**
* Usually your web framework Takes care of binding your submitted data
*/
Owning owning = new Owning();
owning.setProperty(request.getParameter("property"));
Quindi è possibile unire i dati presentati e si pensa le istanze embeddables memorizzati nel database di ancora. Bene, vediamo
Come mostrato sopra tu (o il tuo framework web) hai appena recuperato Proprietà di proprietà, giusto ??? Quindi il tuo owning.getElementList() è vuoto. Poiché owning.getElementList() è vuoto, JPA rimuoverà tutte le sue istanze di incorporamento. Tienilo a mente.
Solitamente una classe incorporabile non ha relazione con un'altra entità. E quando si utilizza un Set di oggetti incorporabili, JPA sempre selezionare prima di salvare/aggiornare perché deve confrontare uno per uno utilizzando il suo metodo di uguale. Pertanto, quando si utilizza una raccolta Set, è necessaria un'implementazione coerente uguale a .
Here è possibile vedere la sua controparte in Hibernate.
fonte
2010-08-05 23:42:56
@Jan qui http://stackoverflow.com/questions/2440806/uml-class-relationships/2441251#2441251 Dai un'occhiata a ** composition ** e vedrai dove @ElementCollection si adatta meglio –