2016-07-21 6 views
17

Я новичок в JPA 2.1 и начал использовать только недавно названные диаграммы сущностей. Для моего проекта я картографирование следующего соотношения в JPA 2.1:Подпоследовательность подменю именной сущности

Order -> OrderDetail -> Продукция -> Productline

Вопрос:

Я хочу поручить JPA присоединиться и принести правильно все необходимые данные. Пока это работает безупречно для Заказ -> OrderDetail -> Продукт, но до сих пор не удалось добавить Sub-Sub Graph для того, чтобы идти так же глубоко, как класс ProductLine. Как сделать подграф подграфа? Ex получить ProductLine продукта?

Вот мои юридические лица (получатели и установщики опущенные):

Заказать

@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; 

Продукт

@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

Не уверен, что это возможно, но что произойдет, если вы создадите еще один NamedSubgraph под подграфами, укажите его тип как Product, а атрибуты являются линией, а затем ссылайтесь на это из @NamedAttributeNode («product») ? –

ответ

9

Простой ответ заключается в том, что вы не можете сделать это, потому что, в текущей реализации JPA, вы бы в конечном итоге делает два отдельных запросов и иметь дело с декартовыми продуктов. Некоторая будущая версия JPA может быть расширена, чтобы включать в себя больше уровней подграфов, но, как и сегодня, этого нет. Существует группа JPA SPEC, которая работает в следующей версии JPA. Feel free to submit your request/suggestion there.

Здесь на StockOverflow находится another reference to the same question.

 Смежные вопросы

  • Нет связанных вопросов^_^