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     }

 

你可能感兴趣的:(jpa)