2015-03-15 29 views
5

Il problema è il seguente:Conservare JPA un'entità con dato id oggetto campo al posto di oggetto stesso

Abbiamo entità:

@Entity 
public class Feedback { 
    @Id 
    @GeneratedValue(generator="token") 
    private String id; 

    @ManyToOne 
    private Product product; 

    private String message; 

    // other fields 
} 

e abbiamo un endpoint del server, che riceve un feedback da parte dei clienti. commenti ricevuti in/formato basata su form multipart, con campi:

ProductId - product identifier 
Message - feedback message 
Some other fields 

Per impostare Feedback.product abbiamo bisogno di caricare oggetti Prodotto da JPA - questo può richiedere molto tempo e crea le query inutili.

È possibile memorizzare l'entità, ma passare l'id del prodotto anziché l'oggetto del prodotto? Abbiamo bisogno di un modo per modificare la query INSERT.

Utilizziamo EclipseLink JPA con Spring e Vaadin.

risposta

6

Utilizzare EntityManager.getReference(): se l'entità non è già stata caricata, crea semplicemente un proxy inizializzato pigro attorno all'ID, senza che sia necessario eseguire alcuna query SQL.

+0

Grazie. Come è possibile verificare se l'entità esiste? O per forzare getReference a lanciare un'eccezione, se non esiste un'entità con tale id? –

+0

Usa trova. Ma poi avrai una query che vorresti evitare. –