zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Webservice里使用Linq遇到ToList输出泛型而产生循环引用错误的解决办法(转)
    JavaScript 面向对象程序设计(转)
    SilverLight中的基本图形(转)
    JQuery常用方法一览(转)
    常用的JS(转)
    简单的java socket 服务器端
    Eclipse RCP 之国际化(转载)
    使用Eclipse构建GeoTools项目
    java.lang.UnsatisfiedLinkError: no XX in java.library.path解决方法
    sqlite第三方类库:FMDB使用(转载)
  • 原文地址:https://www.cnblogs.com/heidsoft/p/3834166.html
Copyright © 2011-2022 走看看