2012-08-05 12 views
5

Possiedo un'applicazione java per motore di app google esistente eseguita con jpa e ora sto cercando di passare a oggettivare per molti scopi diversi.Google App Engine java sostituisce jpa @ OneToMany/@ ManyToOne con oggettivazione

L'applicazione corrente ha la seguente rappresentazione delle entità.

Class Parent{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key key; 

    @OneToMany(cascade=CascadeType.ALL, mappedBy="parent") 
    private List<Child> childs = null; 
} 

Class Child{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key key; 

    @ManyToOne 
    private Parent parent; 

} 

Come posso ottenere la rappresentazione di cui sopra in oggettivazione? Sto usando objectify4.
Ho visto @Parent, ma non sembra possibile caricare l'elenco delle entità figlio direttamente durante il recupero di un genitore?

Grazie,

Ramesh.V

risposta

2

oggettivare utilizza diversi concepts di archivi di dati relazionali e ORM. Le relazioni sono costruite usando Key s e non vengono caricate automaticamente. È possibile leggere la modellazione delle relazioni in Objectify here. La relazione @Parent è something special e non è quella rilevante per le relazioni 1: n o n: m.

Quindi sostanzialmente si hanno

class Parent { 
    Key<Child>[] childs; 
} 

class Child { 
    Key<Parent> parent; 
} 

E poi si otterrebbe le entità tramite il servizio Objectfy, per esempio

Parent aParent = ofy.get(aChild.parent); 

Non ci sono collezioni caricate pigramente. Se vuoi costruire una serie di oggetti devi farlo esplicitamente.

+0

Grazie per la risposta, è possibile recuperare le entità figlio dal padre senza memorizzare chiavi figlio/riferimenti a genitore. –

+0

Le associazioni sono espresse da 'Key's, quindi ne hai bisogno in' Parent' o 'Child'. Se li hai in entrambi, crei un'associazione bidirezionale che è più difficile da mantenere e spesso non molto utile. Puoi lasciare andare l'array 'Key' in' Parent'. Quindi hai solo bisogno dei metodi Objectify per il filtraggio per ottenere tutti gli oggetti 'Child' con una specifica' Chiave 'Parent'. Ciò è particolarmente utile se si dispone di un numero elevato di bambini che devono essere ulteriormente filtrati in base a determinati criteri o paging. –

+0

Ma come funziona JPA senza memorizzare le chiavi in ​​genitore o figlio? La mia applicazione java GAE esistente utilizza JPA e vedo che il datastore non ha alcuna chiave memorizzata in alcun figlio o genitore. E ha solo una relazione genitore/figlio, nessuna chiave è memorizzata sia in genitore che in figlio. Le mie modifiche ora non dovrebbero influenzare il database esistente. Come posso farlo. Grazie per la tua dettagliata spiegazione. –