2010-07-16 15 views
11

Ho appena iniziato a leggere JPA e l'implementazione in modalità ibernazione per comprendere i dettagli. ma, per continuare con lo sviluppo fino ad allora, puoi aiutare a chiarire un qn di base.Quando utilizzare, non utilizzare, OneToOne e ManyToOne

  1. Quando usare OnetoOne
    posso usare OnetoOne se il gestore di entità deve gestire la persistenza del relativo oggetto. il punto è che posso sempre vivere senza specificare oneToOne, ma poi ho la responsabilità di gestire la relazione e di assicurarmi che gli oggetti riferiti non siano nello stato transitorio. È vero?

  2. Quando utilizzare o non utilizzare, ManyToOne
    dire che sono la definizione di un classe Employee, e ha bisogno di definire il rel con datore di lavoro. In questo caso, ho bisogno di specificare ManyToOne come qui di seguito, o che cosa se non

    @Entity 
        public class Employer { 
        String name; 
        } 
    
        @Entity 
        class Employee { 
         String name; 
         @ManytoOne //or not?? 
         Employer employer; 
         } 
    

grazie

risposta

6

1: Quando si lavora con le relazioni di entità, è necessario utilizzare sempre le annotazioni del caso (OneToOne, OneToMany, ManyToOne o ManyToMany). La scelta che hai è se vuoi essere sicuro che l'entità dietro la relazione non sia transitoria tu stesso, o specificare la proprietà cascade sull'annotazione OneToOne per lasciare che JPA si prenda cura di quello per te. Ciò consente di creare un intero grafo di oggetti e persistono in una sola chiamata:

@OneToOne(cascade = CascadeType.ALL) 
private MyType myType; 

2: Sì, un rapporto di lavoro suona come un rapporto OneToMany, e il rapporto di lavoro-datore di lavoro sarebbe ManyToOne . Se ti piacerebbe avere entrambe le direzioni, si chiama una relazione bidirezionale. Dai uno sguardo allo relevant section in the Java EE tutorial per i dettagli.

JPA section in the Java EE tutorial è un buon riferimento per iniziare.

3

Quando utilizzare OneToOne È possibile utilizzare OneToOne se il gestore dell'entità deve gestire la persistenza dell'oggetto correlato. il punto è che posso sempre vivere senza specificare oneToOne, ma poi ho la responsabilità di gestire la relazione e di assicurarmi che gli oggetti riferiti non siano nello stato transitorio. È vero?

Non è necessario contrassegnare la relazione se non si desidera che il gestore di entità gestisca le operazioni. È possibile avere l'entità correlata come campo transitorio e mantenere l'entità correlata manualmente. Ma in tal caso, non utilizzeresti l'intero elenco di funzionalità offerte da JPA.

Marcando le relazioni, EntityManager viene a conoscenza della struttura del database. E questo è essenziale se si desidera utilizzare la potenza di JPA.

Eg: class Car 
     { 
     @OneToOne 
     Warehouse warehouse; 
     //other fields 
     } 

Qui

  • posso recuperare l'oggetto del magazzino relativi durante il recupero di un auto

  • posso persistere un oggetto Warehouse, mentre persiste un auto (opzionale cascata come ha spiegato il poster di seguito)

  • allo stesso modo Aggiorna, Elimina ...

Oltre a questi, durante l'utilizzo JPQL,

si può attraversare a magazzino

come in

em.createQuery("select c.warehouse from Car c"); 

Questi non avrebbero funzionato a meno che non si contrassegna il rapporto.

Problemi correlati