2011-10-27 9 views
6

Mam problem z utrzymaniem pola OneToMany. Są to dwie uproszczone klasy: Używam do wykonania testu.Jpa OneToMany nie uporczywe dziecko

public class User implements Serializable { 
... 
private String name; 
... 
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL) 
private List<PhoneNumber> phoneNumbers; 
... 
} 

public class PhoneNumber implements Serializable { 
... 
private String phoneNumber; 
... 
@ManyToOne() 
private User user; 
... 
} 

Więc chcę to zrobić:

User u = new User(); 
PhoneNumber p = new PhoneNumber(); 
u.setName("Alan"); 
u.getPhoneNumbers.add(p); 

Ale kiedy utrzymują się użytkownikowi u dziecka PhoneNumber nie jest automatycznie zachowywane. W drodze do O, potrzebuję tylko jednego do wielu kompozycji.

Używam EclipseLink.

Wielkie dzięki wszystkim za podpowiedzi.

+0

To trochę dziwne - taki przykład działa dobrze w moim przypadku (EclipseLink). Na koniec robisz tylko EntityManager # persist (u)? Skąd wiadomo, że wartość nie jest zachowywana - sprawdzana w bazie danych lub w jakiś sposób ankietowana? Czy spróbuj spłukać EntityManager? –

Odpowiedz

2

Trzeba ustanowić relację w obu kierunkach. Dodaj p.setUser(u) do swojego kodu:

User u = new User(); 
PhoneNumber p = new PhoneNumber(); 
u.setName("Alan"); 
u.getPhoneNumbers.add(p); 
p.setUser(u); 
+0

Czy jesteś pewien, że musisz ustawić oba kierunki, aby utrzymać jednostkę PhoneNumber? –

+0

@Pedro Jeśli jest to relacja dwukierunkowa (jak pokazano w fragmencie kodu pytania): Tak. –

+2

czy to dlatego, że numer telefonu jest odwrotną stroną relacji? Udało mi się utrzymać strukturę omówioną powyżej bez ustawiania drugiej strony relacji. PhoneNumeber.user ma wartość NULL, ale działa pomyślnie. Spójrz na specyfikację JPA 2.0 3.2.4 "Dwukierunkowe relacje między zarządzanymi podmiotami będą zachowane w oparciu o referencje posiadane przez stronę będącą właścicielem, to deweloper jest odpowiedzialny za przechowywanie referencji w pamięci w posiadaniu side i te utrzymywane na odwrotnej stronie zgodne ze sobą, gdy zmieniają się " –