2015-03-19 4 views
5

Angenommen, Sie haben ein Auto mit einer Reifensammlung.JPA speichern "neue" Entity mit Bezug auf eine bestehende Entity mit nur seiner ID?

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

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

Nun, wenn Sie wollen ein neues Auto hinzuzufügen und bestehende Reifen fügen Sie den gesamten vorhandenen Reifen Entities holen, um das Auto-Set zu bestücken gehen könnte.

Ist es möglich, einfach einige Reifen-IDs zu haben und das Auto zu speichern, ohne zuerst die gesamte (n) Reifeneinheit (en) in den Speicher zu holen? Gibt es eine Möglichkeit, es mit nur einer Tire-ID zu speichern, wenn es sich um eine Single-Tire-Instanz anstelle eines Sets handelt? Verwenden von JPA und der Kriterien-API oder JPQL.

+1

Nein. Der springende Punkt von JPA ist, die Beziehungen zu repräsentieren und zu handhaben, so dass Sie nicht hacken können, indem Sie das Wissen nutzen, wie die Relationen tatsächlich in Ihrer db-Ebene implementiert sind. – Zielu

+0

Mithilfe von Entitätsdiagrammen können Sie teilweise bevölkerte Objekte abrufen. – Zielu

+0

Welche Version von JPA verwenden Sie? Ich habe hier mit JPA 2.1 getestet und es lädt nicht die ganze Sammlung, nur um ein Element zur Liste hinzuzufügen. – uaiHebert

Antwort

9

Sie können eine ID verwenden, um ein Proxy- "Stellvertreter" -Objekt über EntityManager.getReference zu laden. Es werden keine Datenbankabfragen ausgegeben, wenn Sie nicht auf eine Eigenschaft des Objekts zugreifen.

Wenn Sie auf eine Eigenschaft zugreifen, wird ein Lazy-Loading-Mechanismus gestartet und ein tatsächliches Objekt geladen. Die following question demonstrierte die Anatomie des Proxy-Objekts. Nützlich für ein besseres Bild

Verwandte Themen