Eclipse+JBoss+EJB3實(shí)現(xiàn)Entity Bean的多對多映射
在EJB3中需要使用@ManyToMany對封裝多對多關(guān)系的字段或getter方法進(jìn)行注釋。先看看下面的表:

t_addresses表和t_customers表是多對多的關(guān)系。需要使用一個關(guān)聯(lián)表來描述這種關(guān)系,關(guān)聯(lián)表的結(jié)構(gòu)如下圖所示。

在Customer類中定義一個Collection < ADDRESS>類型的字段(addresses),用于保存與該Customer對象相對應(yīng)的多個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表的連接字段關(guān)系。
 - 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;
 - }
 - }
 
由于是多對多的關(guān)系,因此,在Address類中需要定義一個Collection類型的字段(customers)用來保存與該Address對象相對應(yīng)的Customer對象。getCustomers方法也需要使用@ManyToMany進(jìn)行注釋??梢允褂孟旅娲a進(jìn)行測試:
- 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);
 
【編輯推薦】















 
 
 
 
 
 
 