首页 > 代码库 > JPA一对多和多对一关系

JPA一对多和多对一关系

 1-m:多的一方为关系维护端,关系维护端负责外键纪录的更新,关系被维护端没有权力更新外键纪录.

 

维护端注解

 

Java代码  收藏代码
  1. @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REFRESH,  
  2.             CascadeType.MERGE, CascadeType.REMOVE },  
  3.                        fetch = FetchType.EAGER,  
  4.                        mappedBy = "order")  

被维护端注解

 

Java代码  收藏代码
  1. @ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH }, optional = false)  
  2. @JoinColumn(name = "order_id")  

 

 

 

对于一对多和多对一关系的现实中的例子是,网上购物时的订单和订单项。一个订单有多个订单项。多个订单项属于一个订单。

 

订单实体类:

Java代码  收藏代码
  1. package com.taoistwar.jpa.entity.onetomany;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. import javax.persistence.CascadeType;  
  7. import javax.persistence.Entity;  
  8. import javax.persistence.FetchType;  
  9. import javax.persistence.GeneratedValue;  
  10. import javax.persistence.GenerationType;  
  11. import javax.persistence.Id;  
  12. import javax.persistence.OneToMany;  
  13. import javax.persistence.Table;  
  14.   
  15. @Entity  
  16. @Table(name = "order_info")  
  17. public class OrderInfo {  
  18.     private Integer id;  
  19.     private String name;  
  20.   
  21.     private Set<OrderItem> items = new HashSet<OrderItem>();  
  22.   
  23.     @Id  
  24.     @GeneratedValue(strategy = GenerationType.AUTO)  
  25.     public Integer getId() {  
  26.         return id;  
  27.     }  
  28.   
  29.     public void setId(Integer id) {  
  30.         this.id = id;  
  31.     }  
  32.   
  33.     public String getName() {  
  34.         return name;  
  35.     }  
  36.   
  37.     public void setName(String name) {  
  38.         this.name = name;  
  39.     }  
  40.   
  41.     @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REFRESH,  
  42.             CascadeType.MERGE, CascadeType.REMOVE }, fetch = FetchType.EAGER,   
  43.                        mappedBy = "order")  
  44.     public Set<OrderItem> getItems() {  
  45.         return items;  
  46.     }  
  47.   
  48.     public void setItems(Set<OrderItem> items) {  
  49.         this.items = items;  
  50.     }  
  51.   
  52.     public void addOrderItem(OrderItem orderItem) {  
  53.         orderItem.setOrder(this);  
  54.         this.items.add(orderItem);  
  55.     }  
  56.   
  57. }  

 重点在于:

Java代码  收藏代码
  1.      @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REFRESH,  
  2.     CascadeType.MERGE, CascadeType.REMOVE }, fetch = FetchType.EAGER,  
  3.                      mappedBy = "order")  
  4. ublic Set<OrderItem> getItems() {  
  5. return items;  

 订单项实体类:

Java代码  收藏代码
  1. package com.taoistwar.jpa.entity.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.GenerationType;  
  8. import javax.persistence.Id;  
  9. import javax.persistence.JoinColumn;  
  10. import javax.persistence.ManyToOne;  
  11. import javax.persistence.Table;  
  12.   
  13. @Entity  
  14. @Table(name = "order_item")  
  15. public class OrderItem {  
  16.     private Integer Id;  
  17.     private String name;  
  18.   
  19.     private OrderInfo order;  
  20.   
  21.     @Id  
  22.     @GeneratedValue(strategy = GenerationType.AUTO)  
  23.     public Integer getId() {  
  24.         return Id;  
  25.     }  
  26.   
  27.     public void setId(Integer id) {  
  28.         Id = id;  
  29.     }  
  30.   
  31.     @Column(length = 20, nullable = true)  
  32.     public String getName() {  
  33.         return name;  
  34.     }  
  35.   
  36.     public void setName(String name) {  
  37.         this.name = name;  
  38.     }  
  39.   
  40.     @ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH }, optional = false)  
  41.     @JoinColumn(name = "order_id")  
  42.     public OrderInfo getOrder() {  
  43.         return order;  
  44.     }  
  45.   
  46.     public void setOrder(OrderInfo order) {  
  47.         this.order = order;  
  48.     }  
  49.   
  50.     @Override  
  51.     public int hashCode() {  
  52.         final int prime = 31;  
  53.         int result = 1;  
  54.         result = prime * result + ((Id == null) ? 0 : Id.hashCode());  
  55.         return result;  
  56.     }  
  57.   
  58.     @Override  
  59.     public boolean equals(Object obj) {  
  60.         if (this == obj)  
  61.             return true;  
  62.         if (obj == null)  
  63.             return false;  
  64.         if (getClass() != obj.getClass())  
  65.             return false;  
  66.         OrderItem other = (OrderItem) obj;  
  67.         if (Id == null) {  
  68.             if (other.Id != null)  
  69.                 return false;  
  70.         } else if (!Id.equals(other.Id))  
  71.             return false;  
  72.         return true;  
  73.     }  
  74.   
  75. }  

 重点在于:

Java代码  收藏代码
  1.       @ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH }, optional = false)  
  2. @JoinColumn(name = "order_id")  
  3. public OrderInfo getOrder() {  
  4.     return order;  
  5. }  

 测试类:

Java代码  收藏代码
  1. package com.taoistwar.jpa.entity.onetomany;  
  2.   
  3. import javax.persistence.EntityManager;  
  4. import javax.persistence.EntityManagerFactory;  
  5. import javax.persistence.Persistence;  
  6.   
  7. import org.junit.Test;  
  8.   
  9.   
  10. public class OneToMany {  
  11.     @Test  
  12.     public void save() {  
  13.         EntityManagerFactory emf = Persistence  
  14.                 .createEntityManagerFactory("JPAPU");  
  15.         EntityManager em = emf.createEntityManager();  
  16.         em.getTransaction().begin();  
  17.         OrderInfo o = new OrderInfo();  
  18.         o.setName("订单一");  
  19.         OrderItem oi1 = new OrderItem();  
  20.         oi1.setName("产品一");  
  21.         o.addOrderItem(oi1);  
  22.         OrderItem oi2 = new OrderItem();  
  23.         oi2.setName("产品一");  
  24.         o.addOrderItem(oi2);  
  25.         OrderItem oi3 = new OrderItem();  
  26.         oi3.setName("产品一");  
  27.         o.addOrderItem(oi3);  
  28.         OrderItem oi4 = new OrderItem();  
  29.         oi4.setName("产品一");  
  30.         o.addOrderItem(oi4);  
  31.         em.persist(o);  
  32.         // UUID.randomUUID().toString();  
  33.         em.getTransaction().commit();  
  34.         emf.close();  
  35.     }  
  36. }  
 

 

 

 

  • JPA.zip (5.7 MB)
  • 下载次数: 537