JPA-一对多关系

JPA中,一对多关系使用@OneToMany标示

关系维护端:

 1 package com.yl.demo1.bean.oneTomany;
 2 
 3 import javax.persistence.CascadeType;
 4 import javax.persistence.Column;
 5 import javax.persistence.Entity;
 6 import javax.persistence.GeneratedValue;
 7 import javax.persistence.Id;
 8 import javax.persistence.JoinColumn;
 9 import javax.persistence.ManyToOne;
10 
11 
12 @Entity
13 public class OrderItem {
14     
15     private Integer id;
16     private String productName;
17     private Float sellPrice;
18     private Order order;
19     
20     @Id @GeneratedValue
21     public Integer getId() {
22         return id;
23     }
24     public void setId(Integer id) {
25         this.id = id;
26     }
27     @Column(length=40, nullable=false)
28     public String getProductName() {
29         return productName;
30     }
31     public void setProductName(String productName) {
32         this.productName = productName;
33     }
34     @Column(nullable=false)
35     public Float getSellPrice() {
36         return sellPrice;
37     }
38     public void setSellPrice(Float sellPrice) {
39         this.sellPrice = sellPrice;
40     }
41     /**
42      * optional代表属性是否可选,
43      * true--代表字段可为空 
44      * false--代表字段不允许为null
45      * 
46      * @JoinColumn---指定外键的名称
47      */
48     @ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH}, optional=true)
49     @JoinColumn(name="order_id")
50     public Order getOrder() {
51         return order;
52     }
53     public void setOrder(Order order) {
54         this.order = order;
55     }
56     
57     
58 }

关系被维护端:

 1 package com.yl.demo1.bean.oneTomany;
 2 
 3 import java.util.HashSet;
 4 import java.util.Set;
 5 
 6 import javax.persistence.CascadeType;
 7 import javax.persistence.Column;
 8 import javax.persistence.Entity;
 9 import javax.persistence.FetchType;
10 import javax.persistence.Id;
11 import javax.persistence.OneToMany;
12 import javax.persistence.Table;
13 /**
14  * JPA中,1-m的双向关系中,多的一方为关系维护端,关系维护端服务外键记录的更新,关系被维护端是没有权利更新外键记录的
15  * 
16  * 
17  */
18 @Entity
19 @Table(name="orders")
20 public class Order {
21     private String orderId;
22     private Float amount = 0f;
23     private Set<OrderItem> items = new HashSet<OrderItem>();
24     
25     @Id @Column(length=12)
26     public String getOrderId() {
27         return orderId;
28     }
29     public void setOrderId(String orderId) {
30         this.orderId = orderId;
31     }
32     @Column(nullable=false)
33     public Float getAmount() {
34         return amount;
35     }
36     public void setAmount(Float amount) {
37         this.amount = amount;
38     }
39     /**级联操作
40      * CascadeType.REFRESH--select order, select OrderItem
41      * CascadeType.PERSIST--insert into Order, insert into OrderItem
42      * CascadeType.MERGE----当Order处于游离状态时,对Order更新,也会更新OrderItem--update Order, for(update OrderItem)
43      * CascadeType.REMOVE---delete Order, delete OrderItem
44      * 可以采用CascadeType.ALL包括上述四种.
45      * 上述四种方法只有调用相应的方法时才会触发。即EntityManager.refresh(),EntityManager.persist(),EntityManager.merge(), EntityManager.remove()
46      *
47      *   *ToMany的fetch默认值为FetchType.LAZY
48      *   *ToOne的fetch默认值为FetchType.EAGER
49      *   
50      *   
51      *   mappedBy出现在关系的被维护端,它指定在关系维护端是由哪个属性进行维护关系
52      */
53     @OneToMany(cascade={CascadeType.REFRESH, CascadeType.PERSIST}
54             , fetch=FetchType.LAZY
55             , mappedBy="order")
56     public Set<OrderItem> getItems() {
57         return items;
58     }
59     public void setItems(Set<OrderItem> items) {
60         this.items = items;
61     }
62     
63     
64     public void addOrderItem(OrderItem orderItem) {
65         orderItem.setOrder(this);
66         this.items.add(orderItem);
67     }
68     
69 }

 常见操作:

 1 @Test
 2     public void save() {
 3         EntityManagerFactory factory = Persistence.createEntityManagerFactory("YL");
 4         EntityManager em = factory.createEntityManager();
 5         em.getTransaction().begin();//事务开始
 6         
 7         Order order = new Order();
 8         order.setAmount(34f);
 9         order.setOrderId("999");
10         
11         OrderItem orderItem1 = new OrderItem();
12         orderItem1.setProductName("football");
13         orderItem1.setSellPrice(90f);
14         
15         OrderItem orderItem2 = new OrderItem();
16         orderItem2.setProductName("basketball");
17         orderItem2.setSellPrice(100f);
18         
19         order.addOrderItem(orderItem1);
20         order.addOrderItem(orderItem2);
21 
22         em.persist(order);
23         
24         em.getTransaction().commit();
25         em.close();
26         factory.close();
27     }
原文地址:https://www.cnblogs.com/dreamfree/p/4077101.html