2012-08-05 15 views
5

Mam już działającą aplikację java aplikacji Javy w wyszukiwarce Google z jpa i teraz próbuję przenieść się do zobiektywizowania w wielu różnych celach.Google App Engine java zastąpić jpa @ OneToMany/@ ManyToOne z objectify

Obecna aplikacja ma przedstawioną poniżej reprezentację encji.

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; 

} 

Jak mogę uzyskać powyższe przedstawienie w Objectify? Używam objectify4.
Widziałem @Parent, ale nie można załadować listy elementów podrzędnych bezpośrednio podczas pobierania rodzica?

Dzięki,

Ramesh.V

Odpowiedz

2

zobiektywizować wykorzystuje różne concepts niż relacyjnych składnic danych i ORMs. Relacje są konstruowane przy użyciu Key s i nie są ładowane automatycznie. Możesz przeczytać o modelowaniu relacji w Objectify here. Relacja @Parent jest niezastosowana do relacji 1: n lub n: m.

Więc w zasadzie masz

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

class Child { 
    Key<Parent> parent; 
} 

A potem dostanie podmioty za pośrednictwem serwisu, np Objectfy

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

Nie ma leniwych kolekcji. Jeśli chcesz skonstruować zestaw obiektów, musisz to zrobić wyraźnie.

+0

Dzięki za odpowiedź, czy jest możliwe, aby pobrać żywe dziecko od rodzica bez przechowywania kluczy Dziecko/referencje w rodzica. –

+0

Powiązania są wyrażane przez 'Klucz's, więc potrzebujesz ich w' Parent' lub 'Child'. Jeśli masz je w obu tworzysz dwukierunkowe powiązanie, które jest trudniejsze do utrzymania i często nie jest zbyt użyteczne. Możesz puścić tablicę 'Key' w' Parent'. Następnie potrzebujesz metod Objectify do filtrowania, aby uzyskać wszystkie obiekty 'Child' z określonym' Kluczem 'Parent'. Jest to szczególnie przydatne, jeśli masz dużą liczbę dzieci, które powinny być dalej filtrowane według określonych kryteriów lub stronicowania. –

+0

Ale w jaki sposób JPA działa bez przechowywania kluczy w rodzicu lub podrzędnym? Moja istniejąca aplikacja GAE java używa formatu JPA i widzę, że datastore nie ma żadnego klucza przechowywanego w obu elementach potomnych lub rodzicach. I ma tylko związek rodzicielski dziecko nie klucze są przechowywane zarówno rodzic lub dziecko. Moje zmiany teraz nie powinny wpływać na istniejącą bazę danych. Jak mogę to zrobić. Dziękuję za szczegółowe wyjaśnienie. –