2015-03-15 5 views
5

Das Problem ist folgende:Shop JPA-Entität mit bestimmtem Feld Objekt-ID statt Objekt selbst

Wir Einheit haben:

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

    @ManyToOne 
    private Product product; 

    private String message; 

    // other fields 
} 

Und wir haben einen Server-Endpunkt, das Feedback von Kunden erhält. Bewertung erhalten in multipart/form-basiertes Format, mit Feldern:

ProductId - product identifier 
Message - feedback message 
Some other fields 

Feedback.product So stellen wir müssen von JPA Product-Objekt laden - diese zeitaufwendig sein kann und es schafft unnötige Abfragen.

Ist es möglich, Entity zu speichern, aber die Produkt-ID anstelle des Produktobjekts zu übergeben? Wir brauchen eine Möglichkeit, die INSERT-Abfrage zu ändern.

Wir verwenden EclipseLink JPA mit Spring und Vaadin.

Antwort

6

Verwenden Sie EntityManager.getReference(): Wenn die Entität nicht bereits geladen ist, erstellt sie einfach einen Lazy-initialisierten Proxy um die ID, ohne dass eine SQL-Abfrage ausgeführt wird.

+0

Vielen Dank. Wie ist es möglich zu prüfen, ob die Entität existiert? Oder erzwinge getReference eine Ausnahme auszulösen, wenn es keine Entity mit einer solchen ID gibt? –

+0

Verwenden Sie suchen. Aber dann haben Sie eine Abfrage, die Sie vermeiden wollten. –

Verwandte Themen