2015-03-19 6 views
5

Załóżmy, że masz samochód z kolekcją opon.JPA zapisuje "nowy" podmiot w odniesieniu do istniejącego podmiotu, używając tylko jego id?

@Entity 
public class Car { 
    private Long id; 
    @OneToMany(mappedBy = "car") 
    private Set<Tire> tires = new HashSet<>(); 
} 

@Entity 
public class Tire { 
    private Long id; 
    ... 
} 

Teraz, jeśli chcesz dodać nowy samochód i dodać istniejące Opony można przejść sprowadzić całą istniejących podmiotów opon do wypełnienia samochodu Set.

Czy można po prostu mieć niektóre identyfikatory opon i zapisać samochód bez uprzedniego przeniesienia całej jednostki Tire do pamięci? Czy istnieje sposób na zapisanie go za pomocą identyfikatora opony, jeśli był to tylko egzemplarz pojedynczej opony zamiast zestawu? Używanie JPA i API Criteria, a może JPQL.

+1

Nie. Cały punkt JPA ma reprezentować i obsługiwać relacje, więc nie można hackować przy użyciu wiedzy o tym, jak relacjinowalnie są implementowane w warstwie db. – Zielu

+0

Możesz użyć wykresów jednostki, aby pobrać częściowo wypełnione obiekty. – Zielu

+0

Jakiej wersji JPA używasz? Testowałem tutaj z JPA 2.1 i nie ładuję całej kolekcji tylko po to, aby dodać pozycję do listy. – uaiHebert

Odpowiedz

9

Możesz użyć identyfikatora do załadowania obiektu zastępczego proxy, poprzez EntityManager.getReference. Nie wydaje żadnych zapytań DB, chyba że uzyskasz dostęp do dowolnej właściwości obiektu.

Jeśli uzyskasz dostęp do właściwości, mechanizm ładujący się uruchomi się i załaduje rzeczywisty obiekt. The following question demonstrował anatomię obiektu proxy. Przydatne do uzyskania lepszego obrazu

Powiązane problemy