eclipse + JBoss 5 + EJB3开发指南(9):实现Entity Bean的多对多映射

简介:
 在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进行注释。可以使用下面代码进行测试:
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);



 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/214431,如需转载请自行联系原作者
相关文章
|
Java 应用服务中间件 Android开发
【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)
  之前一直用的EJB开发环境是他们搭建好的,直接拿来用,不过还是感觉老吃别人嚼好的不太好吃,所以自己动手来玩一玩。   EJB开发依赖的最基本的环境:JDK、Eclipse、JBoss,这里简单介绍一下最基本的环境的搭建。
【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)
|
Java 数据库连接 应用服务中间件
怎样在eclipse里安装Hibernate / JBoss 工具【最新】
原文:http://www.mkyong.com/hibernate/how-to-install-hibernate-tools-in-eclipse-ide/
201 0
怎样在eclipse里安装Hibernate / JBoss 工具【最新】
|
IDE 应用服务中间件 开发工具
|
Android开发
eclipse生成javaDoc时,出现"编码GBK 的不可映射字符"
引用:http://mackyhe.iteye.com/blog/930726 用eclipse生成javadoc的时候发生“编码 GBK 的不可映射字符 ”其实是字符编码问题。 打开eclipse,project -> Generate javadoc 选择你要输出javadoc的项目-->ne...
977 0
|
1月前
|
Java Maven Android开发
在Eclipse里配置Maven插件
Maven是一款比较常用的Java开发拓展包,它相当于一个全自动jar包管理器,会导入用户开发时需要使用的相应jar包。使用Maven开发Java程序,可以极大提升开发者的开发效率。下面我就跟大家介绍一下如何在Eclipse里安装和配置Maven插件。
66 0
|
1月前
|
XML Java Maven
eclipse 、idea 安装activiti插件
eclipse 、idea 安装activiti插件
|
6月前
|
Java Android开发
eclipse安装SpringBoot插件的无敌办法
eclipse安装SpringBoot插件的无敌办法
65 0
|
6月前
|
Java Android开发 Spring
在 Eclipse 中安装 SpringTools 插件
在 Eclipse 中安装 SpringTools 插件
73 0