2016-07-21 11 views
17

Jestem nowy w JPA 2.1 i zacząłem używać tylko ostatnio nazwanych wykresów jednostek. Dla mojego projektu mam mapowania następującą zależność w JPA 2.1:Podraport nazwanego obiektu Sub-Subgraph

Order -> OrderDetail -> Produkty -> productline

Pytanie:

chcę pouczać WZP do przyłączenia się i sprowadzić właściwie wszystkie potrzebne dane. Jak na razie działa to bezbłędnie dla Zamów -> ZamówDetail -> Produkt, ale do tej pory nie udało mi się dodać wykresu dodatkowego sub-Sub, aby przejść tak głęboko, jak klasa ProductLine. Jak utworzyć subgraph subgraph? Czy otrzymujesz ProductLine produktu?

Oto moje podmioty (pobierające i ustawiające pominięta):

Zamówienie

@Entity 
@Table(name="ORDERS") 
@NamedEntityGraph(
    name = "graph.Order.details", 
    attributeNodes = { 
     @NamedAttributeNode(value = "details", subgraph = "graph.OrderDetail.product") 
    }, 
    subgraphs = { 
     @NamedSubgraph(name = "graph.OrderDetail.product", attributeNodes = @NamedAttributeNode("product")) 
    } 
) 

public class Order implements Serializable{ 
    @Id 
    @Column(name = "orderNumber") 
    private Long number; 

    @Column(name = "orderDate") 
    private Date date; 

    @OneToMany(mappedBy = "order") 
    private List<OrderDetail> details; 
} 

OrderDetail

@Entity 
@Table(name = "orderdetails") 
public class OrderDetail implements Serializable{ 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "orderNumber") 
    @Id 
    private Order order; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "productCode", nullable = false) 
    @Id 
    private Product product; 

    @Column(name = "orderLineNumber") 
    private int lineNumber; 

    @Column(name = "quantityOrdered") 
    private int quantity; 

wyrobów

@Entity 
@Table(name = "products") 
class Product { 
    @Column(name = "productCode") 
    @Id 
    private String code; 

    @Column(name = "quantityInStock") 
    public int quantity; 

    @ManyToOne 
    @JoinColumn(name = "productLine") 
    private ProductLine line; 

productline

@Entity 
@Table(name = "productlines") 
public class ProductLine { 
    @Id 
    @Column(name = "productLine") 
    private String line; 

    @Column 
    private String textDescription; 
+0

Nie jestem pewien, czy jest to możliwe, ale co się stanie, jeśli utworzysz kolejny NamedSubgraph w podgrafach, określisz jego typ Produktem, z atrybutami będącymi wierszami, a następnie odwołasz się do tego z @NamedAttributeNode ("produkt"), który masz ? –

Odpowiedz

9

Odpowiedź jest prosta, że ​​nie można tego zrobić, bo z obecnej implementacji JPA, by skończyć się robi dwa oddzielne zapytania i mając do czynienia z iloczyn kartezjański. Niektóre przyszłe wersje JPA można rozszerzyć, aby zawierały więcej poziomów podgraphów, ale tak jak dziś stoi, nie ma. Istnieje grupa JPA SPEC, która pracuje nad kolejną wersją JPA. Feel free to submit your request/suggestion there.

Tutaj na StockOverflow jest another reference to the same question.

Powiązane problemy