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

简介: 本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:eclipse + JBoss 5 + EJB3开发指南(8):实现Entity Bean的一对多(one-to-many)映射     在EJB3中需要使用@ManyToMany对封装多对多关系的字段或getter方法进行注释。
本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇: 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进行注释。可以使用下面代码进行测试:
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)映射

国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

目录
相关文章
|
Java 应用服务中间件 Android开发
【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)
  之前一直用的EJB开发环境是他们搭建好的,直接拿来用,不过还是感觉老吃别人嚼好的不太好吃,所以自己动手来玩一玩。   EJB开发依赖的最基本的环境:JDK、Eclipse、JBoss,这里简单介绍一下最基本的环境的搭建。
【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)
|
Java Android开发 Spring
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象
121 0
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象
|
Java Android开发 Spring
sping练习,在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台。
sping练习,在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台。
195 0
sping练习,在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台。
|
Java Android开发 Spring
spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。
spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。
129 0
spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。
|
Java 数据库连接 应用服务中间件
怎样在eclipse里安装Hibernate / JBoss 工具【最新】
原文:http://www.mkyong.com/hibernate/how-to-install-hibernate-tools-in-eclipse-ide/
194 0
怎样在eclipse里安装Hibernate / JBoss 工具【最新】
|
IDE 应用服务中间件 开发工具
|
应用服务中间件 Android开发 容器
eclipse + JBoss 5 + EJB3开发指南(7):实现Entity Bean的一对一(one-to-one)映射
本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:eclipse + JBoss 5 + EJB3开发指南(6):编写第一个实体Bean程序     一对一映射是很常用的。
1059 0
|
应用服务中间件 Android开发 Java
eclipse + JBoss 5 + EJB3开发指南(8):实现Entity Bean的一对多(one-to-many)映射
本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:eclipse + JBoss 5 + EJB3开发指南(7):实现Entity Bean的一对一(one-to-one)映射     EJB3的一对多映射使用@OneToMany来设置,如果是双向的一对多映射,在many方需要使用@ManyToOne设置。
1055 0

推荐镜像

更多