隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
          數據加載中……

          eclipse + JBoss 5 + EJB3開發指南(9):實現Entity Bean的多對多(many-to-many)映射

          本文為原創,如需轉載,請注明作者和出處,謝謝!

          上一篇:eclipse + JBoss 5 + EJB3開發指南(8):實現Entity Bean的一對多(one-to-many)映射

              在EJB3中需要使用@ManyToMany對封裝多對多關系的字段或getter方法進行注釋。先看看下面的表:
          圖1  t_addresses表

                t_addresses表和t_customers表是多對多的關系。需要使用一個關聯表來描述這種關系,關聯表的結構如下圖所示。
          圖2  t_customers_addresses
              在Customer類中定義一個Collection<Address>類型的字段(addresses),用于保存與該Customer對象相對應的多個Address對象,代碼如下:
          package entity;

          import java.util.Collection;

          import javax.persistence.CascadeType;
          import javax.persistence.Entity;
          import javax.persistence.FetchType;
          import javax.persistence.GeneratedValue;
          import javax.persistence.GenerationType;
          import javax.persistence.Id;
          import javax.persistence.JoinColumn;
          import javax.persistence.JoinTable;
          import javax.persistence.ManyToMany;
          import javax.persistence.OneToMany;
          import javax.persistence.OneToOne;
          import javax.persistence.PrimaryKeyJoinColumn;
          import javax.persistence.Table;

          @Entity
          @Table(name 
          = "t_customers")
          public class Customer
          {
              
          private int id;
              
          private String name;
              
          private Referee referee;
              
          private Collection<Order> orders;

              
          private Collection<Address> addresses;

              @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
              @JoinTable(name 
          = "t_customers_addresses", joinColumns = @JoinColumn(name = "customer_id",
               referencedColumnName 
          = "id"), inverseJoinColumns = @JoinColumn(name = "address_id", referencedColumnName = "id"))
              
          public Collection<Address> getAddresses()
              {
                  
          return addresses;
              }

              ... ...

          }

              @JoinTable注釋用于指定連接表和t_customers及t_addresses表的連接字段關系。
              Address類的代碼如下:

          package entity;

          import java.util.Collection;

          import javax.persistence.CascadeType;
          import javax.persistence.Entity;
          import javax.persistence.FetchType;
          import javax.persistence.GeneratedValue;
          import javax.persistence.GenerationType;
          import javax.persistence.Id;
          import javax.persistence.ManyToMany;
          import javax.persistence.Table;
          @Entity
          @Table(name
          ="t_addresses")
          public class Address
          {
              
          private int id;
              
          private String addressLine;
              
          private String country;
              
          private String postCode;
              
          private Collection<Customer> customers;
              @Id
              @GeneratedValue(strategy
          =GenerationType.IDENTITY)
              
          public int getId()
              {
                  
          return id;
              }
              
          public void setId(int id)
              {
                  
          this.id = id;
              }
              
          public String getAddressLine()
              {
                  
          return addressLine;
              }
              
          public void setAddressLine(String addressLine)
              {
                  
          this.addressLine = addressLine;
              }
              
          public String getCountry()
              {
                  
          return country;
              }
              
          public void setCountry(String country)
              {
                  
          this.country = country;
              }
              
          public String getPostCode()
              {
                  
          return postCode;
              }
              
          public void setPostCode(String postCode)
              {
                  
          this.postCode = postCode;
              }
              @ManyToMany(mappedBy
          ="addresses")
              
          public Collection<Customer> getCustomers()
              {
                  
          return customers;
              }
              
          public void setCustomers(Collection<Customer> customers)
              {
                  
          this.customers = customers;
              }    
          }

              由于是多對多的關系,因此,在Address類中需要定義一個Collection<Customer>類型的字段(customers)用來保存與該Address對象相對應的Customer對象。getCustomers方法也需要使用@ManyToMany進行注釋??梢允褂孟旅娲a進行測試:
          Customer customer = new Customer();
          customer.setName(
          "微軟11");
          List<Address> addresses = new ArrayList<Address>();
          Address address 
          = new entity.Address();
          address.setAddressLine(
          "address1");
          address.setCountry(
          "中國"); 
          address.setPostCode(
          "12345678");
          addresses.add(address);
          address 
          = new entity.Address();
          address.setAddressLine(
          "address2");
          address.setCountry(
          "美國"); 
          address.setPostCode(
          "4321");
          addresses.add(address);
          customer.setAddresses(addresses);

          em.persist(customer);

          下一篇:eclipse + JBoss 5 + EJB3開發指南(9):實現Entity Bean的多對多(many-to-many)映射



          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2009-06-03 16:15 銀河使者 閱讀(1798) 評論(0)  編輯  收藏 所屬分類: java 、 原創 、ejb3 、JBoss

          主站蜘蛛池模板: 佛冈县| 河东区| 息烽县| 松溪县| 重庆市| 麟游县| 清涧县| 广州市| 建德市| 阿克苏市| 尖扎县| 昌都县| 临安市| 甘泉县| 抚松县| 大余县| 珠海市| 中西区| 宁安市| 新郑市| 商水县| 麟游县| 张掖市| 碌曲县| 迭部县| 吴桥县| 三亚市| 景洪市| 呈贡县| 皋兰县| 广汉市| 衡阳县| 安福县| 龙南县| 侯马市| 阳山县| 乌兰浩特市| 全南县| 丰原市| 丹巴县| 福州市|