簡體   English   中英

JPA多對多關系:零或更多

[英]JPA many to many relationship : zero or more

我是JPA的新手,所以我有一個關於多對多關系(零到更多實現)的問題:

如果您有類似這樣的關系:

在此處輸入圖片說明

如前所述,一種產品可以不經訂單即存在(通常它們會隨着新產品的到貨而被添加),之后可以在一項或多項訂單上使用。 訂單必須包含至少1個或更多產品。

你必須說明關系

@Entity(name = "ORDERS") 
public class Order {
       @Id 
       @Column(name = "ORDER_ID", nullable = false)
       @GeneratedValue(strategy = GenerationType.AUTO)
       private long orderId;

   @Column(name = "CUST_ID")
   private long custId;

   @Column(name = "TOTAL_PRICE", precision = 2)
   private double totPrice;     

   @ManyToMany(fetch=FetchType.EAGER)
   @JoinTable(name="ORDER_DETAIL",
           joinColumns=
           @JoinColumn(name="ORDER_ID", referencedColumnName="ORDER_ID"),
     inverseJoinColumns=
           @JoinColumn(name="PROD_ID", referencedColumnName="PROD_ID")
   )
   private List<Product> productList;       
 ...............
   The other attributes and getters and setters goes here
}

@Entity(name = "PRODUCT") 
public class Product {
       @Id
       @Column(name = "PROD_ID", nullable = false)
       @GeneratedValue(strategy = GenerationType.AUTO)
       private long prodId;

   @Column(name = "PROD_NAME", nullable = false,length = 50)
   private String prodName;

   @Column(name = "PROD_DESC", length = 200)
   private String prodDescription;

   @Column(name = "REGULAR_PRICE", precision = 2)
   private String price;

   @Column(name = "LAST_UPDATED_TIME")
   private Date updatedTime;
   @ManyToMany(mappedBy="productList",fetch=FetchType.EAGER)
   private List<Order> orderList;       
   ...............
   The other attributes and getters and setters goes here
}

我想知道零對多關系是否仍然可以僅保留(目前)未鏈接到訂單的產品?

但是,當訂單使用產品時,應更新產品中的訂單清單,也應更新orde中的產品清單。 我該如何執行此操作,或者JPA可以為我執行此操作?

  1. 您仍然可以保留產品而無需訂購。

  2. 您必須手動更新關系的另一端。 JPA不會為您這樣做。 (當然,如果您保存一個訂單然后重新提取產品,則您的訂單集合將被更新)

編輯來解釋第二點:

Product persitentProduct = ... //some product
Order newOrder = new Order();
newOrder.getProducts().add(persitentProduct);
//at this point : persistentProduct.getOrders().contains(newOrder)==false
entityManager.persist(newOrder);
//at this point nothing has changed on the other side of the relationship:
// i.e. : persistentProduct.getOrders().contains(newOrder)==false

然后,您將得到類似:

public class Order {
private List products;
...
public void addProduct(Product product) {
    this.products.add(product);
    if !(product.getOrders().contains(product) {
        product.getOrders().add(this);
    }
}
...
}



public class Product {
    private List orders;
    ...
    ...
}

對? 還是我看錯了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM