Soru Adlandırılmış Varlık Grafik Alt-Subgraphı


JPA 2.1’de yeniyim ve yalnızca yakın tarihli Adlandırılmış Grafikler’i kullanmaya başladım. Projem için JPA 2.1'de aşağıdaki ilişkiyi haritayorum:

Sipariş -> Sipariş Formu -> Ürün -> ProductLine

Soru:

JPA'ya gerekli tüm verileri doğru bir şekilde katılmasını ve almasını emretmek istiyorum. Şimdiye kadar bu kusursuz çalışıyor Sipariş -> Sipariş Detayı -> Ürün ancak ProductLine sınıfı kadar derinlere inmek için bir Alt-Sub Grafik ekleyemedim. Bir alt sınıfa nasıl yazılır? Ex Ürünün ProductLine'ını mı alıyor?

İşte benim varlığım (getters ve setters atlanır):

Sipariş

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

Sipariş detayı

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

Ürün

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

Ürün hattı

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

    @Column
    private String textDescription;

24
2017-07-21 13:34


Menşei


Bunun mümkün olup olmadığından emin değilsiniz, ancak altyazılar altında başka bir NamedSubgraph oluşturursanız, türünü satır olarak belirtmek için Ürün türünü belirtin ve ardından @NamedAttributeNode ("ürün") 'a göre referans verin. - Jan-Willem Gmelig Meyling


Cevaplar:


Basit cevap, bunu yapamayacağınızdır çünkü mevcut JPA uygulamasında, iki ayrı sorgulama yapmak ve Kartezyen Ürünler ile uğraşmak zorunda kalırsınız. JPA'nın gelecekteki bazı versiyonları daha fazla altyazı içerecek şekilde genişletilebilirdi, ancak bugün olduğu gibi değil. JPA'nın bir sonraki sürümünde çalışan bir JPA SPEC grubu var. Orada istek / önerinizi göndermek için çekinmeyin.

Burada StockOverflow'da var aynı soruya başka bir referans.


14
2017-08-18 14:32