2015-03-19 9 views
5

Supponiamo di avere un'auto con una collezione di pneumatici.JPA salva "nuova" entità con riferimento a un'entità esistente utilizzando solo il suo id?

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

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

Ora, se si desidera aggiungere una nuova auto e aggiungere pneumatici esistenti si potrebbe andare recuperare l'intero Entità Tyre esistenti per popolare Set della vettura.

È possibile avere semplicemente alcuni ID di pneumatici e salvare l'auto senza recuperare l'intera entità Tire in memoria prima? C'è un modo per salvarlo con un semplice Tire ID se era solo un'istanza Single Tyre invece di un Set? Utilizzando JPA e l'API Criteria, o forse JPQL.

+1

No. L'intero punto di JPA è quello di rappresentare e gestire le relazioni, quindi non puoi hackerare usando la conoscenza di come le parentele sono effettivamente implementate nel tuo livello db. – Zielu

+0

È possibile utilizzare i grafici di entità per recuperare oggetti parzialmente popolati. – Zielu

+0

Quale versione di JPA stai usando? Ho provato qui con JPA 2.1 e non sta caricando tutta la collezione solo per aggiungere un elemento alla lista. – uaiHebert

risposta

9

È possibile utilizzare un ID per caricare un oggetto "vice" proxy, tramite EntityManager.getReference. Non emetterà alcuna query DB a meno che non si acceda a qualsiasi proprietà dell'oggetto.

Se si accede a una proprietà, un meccanismo di caricamento lento inizierà e caricherà un oggetto reale. Il following question ha demoato l'anatomia dell'oggetto proxy. Utile per ottenere un'immagine migliore

Problemi correlati