`
seara
  • 浏览: 648887 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多
本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇:eclipse + JBoss 5 + EJB3开发指南(7):实现Entity Bean的一对一(one-to-one)映射

EJB3的一对多映射使用@OneToMany来设置,如果是双向的一对多映射,在many方需要使用@ManyToOne设置。在本书中给出两个表,其他一个表t_customers在上一篇文章中已给出了,另一个表的结构如图1所示。
图1 t_orders表

t_customers和t_orders表是一对多关系,一个Customer可能有多个Order,而一个Order只能有一个Customer。
在Customer类中需要定义一个集合类型的属性,用来保存多个Order对象,Customer类的代码如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->packageentity;

importjava.util.Collection;

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

@Entity
@Table(name
="t_customers")
publicclassCustomer
{
privateintid;
privateStringname;
privateRefereereferee;
privateCollection<Order>orders;

@OneToMany(mappedBy="customer",cascade=CascadeType.ALL)
publicCollection<Order>getOrders()
{
returnorders;
}
publicvoidsetOrders(Collection<Order>orders)
{
this.orders=orders;
}
@Id
@GeneratedValue(strategy
=GenerationType.IDENTITY)
publicintgetId()
{
returnid;
}
... ...
}
其中@OneToMany的mappedBy属性指定了Order类中获得Customer对象的属性名。Order类的代码如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->packageentity;

importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.GeneratedValue;
importjavax.persistence.GenerationType;
importjavax.persistence.Id;
importjavax.persistence.JoinColumn;
importjavax.persistence.JoinColumns;
importjavax.persistence.JoinTable;
importjavax.persistence.ManyToOne;
importjavax.persistence.Table;

@Entity
@Table(name
="t_orders")
publicclassOrder
{
privateintid;
privateStringproductId;
privateintcount;
privateCustomercustomer;

@ManyToOne
@JoinColumn(name
="customer_id")
publicCustomergetCustomer()
{
returncustomer;
}

publicvoidsetCustomer(Customercustomer)
{
this.customer=customer;
}

@Id
@GeneratedValue(strategy
=GenerationType.IDENTITY)
publicintgetId()
{
returnid;
}
... ...


}
其中@JoinColumn注释的name属性指定t_orders表中用于连接t_customers表的外键名。
可以使用下面的代码进行测试:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> Customercustomer=newCustomer();
customer.setName(
"微软");
List<Order>orders=newArrayList<Order>();
Orderorder
=newOrder();
order.setProductId(
"1234");
order.setCount(
20);
order.setCustomer(customer);
orders.add(order);
order
=newOrder();
order.setProductId(
"4321");
order.setCount(
12);
order.setCustomer(customer);
orders.add(order);
customer.setOrders(orders);
em.persist(customer);

除此之外,还可以使用@JoinTable指定连接表来映射one-to-many关系。连接表的结构如图2所示。
图2 t_customers_orders表

首选需要将Customer类的getOrders方法修改成下的形式:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->@OneToMany
@JoinTable(name
="t_customers_orders",joinColumns=@JoinColumn(name="t_customers_id",
referencedColumnName
="id"),inverseJoinColumns=
@JoinColumn(name
="orders_id",referencedColumnName="id"))
publicCollection<Order>getOrders()
{
returnorders;
}

其中name属性指定图2所示的连接表的名称。joinColumns指定了t_customers表和t_customers_orders表中相连接的字段。inverseJoinColumns指定了t_orders表和t_customers_orders表中相连接的字段。这时t_orders表中的customer_id字段就不再需要了。因此,需要将Order表中的customer属性(getter和setter方法)去掉。

在持久化Customer和Order对象时,需要对Order对象进行持久化后才能对Customer对象进行持久化。

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



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

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

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

分享到:
评论

相关推荐

    使用Eclipse+Jboss+MySql开发EJB

    总的来说,"使用Eclipse+Jboss+MySql开发EJB"是一个综合性的任务,涉及了开发环境的搭建、企业级组件的设计与实现、数据库的连接和操作以及应用的部署与测试。掌握这一流程对于Java EE开发者来说是至关重要的,因为...

    eclipse + JBoss 5 + EJB3开发指南

    ### Eclipse + JBoss 5 + EJB3 开发指南 #### (1):编写第一个无状态的SessionBean ##### 一、配置开发环境 在开始编写无状态的SessionBean之前,首先需要确保开发环境已经正确配置。以下是所需的主要组件: 1...

    eclipse + JBoss 5 + EJB3开发指南中的代码

    总的来说,"eclipse + JBoss 5 + EJB3开发指南中的代码"涵盖了Java EE开发的关键方面,特别是EJB3的使用。通过实践这些示例,开发者可以深入了解如何在现代企业环境中利用EJB3提高生产力,同时减少开发和维护的复杂...

    使用eclipse通过jboss开发简单的ejb应用(jboss7.x & ejb3.x)

    在本文中,我们将深入探讨如何使用Eclipse IDE与JBoss应用程序服务器(版本7.x)来开发和部署一个基于EJB 3.x的简单企业级Java应用程序。EJB(Enterprise JavaBeans)是Java平台上的核心组件,它提供了一种标准的...

    Eclipse+Jboss EJB技术 会话Bean

    在Java企业版(Java EE)开发中,EJB(Enterprise JavaBeans)是核心组件之一,用于构建可扩展、安全和事务处理的服务器端应用程序。EJB技术提供了多种类型的Bean,其中包括会话Bean,它们作为客户端与业务逻辑之间...

    Jboss下开发ejb应用之一会话bean的应用

    本文将围绕“Jboss下开发ejb应用之一会话bean的应用”这一主题,深入探讨如何在Jboss应用服务器上开发和部署会话Bean,以及涉及到的相关工具和源码。 会话Bean是EJB的一种类型,它代表了业务逻辑组件,为客户端提供...

    EJB3+JBOSS5+JPA整合

    **JBOSS5**是一个开源的应用服务器,它实现了Java EE 5规范,包括对EJB3和JPA的支持。JBOSS5提供了一个运行环境,开发者可以在其中部署和运行EJB3应用。它包含了Web服务器、JMS(Java Message Service)、JTA(Java ...

    EJB3 实例教程(JBoss+Eclipse+Ant)

    **EJB3 实例教程(JBoss+Eclipse+Ant)** Enterprise JavaBeans(EJB)是Java平台上用于构建可扩展、安全且事务处理能力强的企业级应用的技术。EJB3是EJB规范的一个重大改革,它引入了许多简化开发的特性,使得企业级...

    手把手系列-Eclipse+JBossIDE+JBoss开发环境配置

    总结,配置Eclipse+JBossIDE+JBoss的开发环境涉及多个步骤,从安装软件、配置环境到创建项目和部署应用,每一步都对开发者的工作效率有直接影响。熟练掌握这些步骤,将有助于你在Java EE开发过程中游刃有余。通过...

    yeclipse7.0+JBoss5.0测试EJB3.0环境搭建过程详解

    ### yeclipse7.0+JBoss5.0测试EJB3.0环境搭建过程详解 在深入探讨如何在yeclipse7.0与JBoss5.0环境下构建和测试EJB3.0应用之前,让我们先了解一些背景知识。EJB(Enterprise JavaBeans)是Java平台的一部分,用于...

    ejb课程测试代码,eclipse+jboss5.1 ant编译等代码

    【ejb课程测试代码】是针对企业级Java Bean(Enterprise JavaBeans,简称EJB)技术的一系列测试案例,主要用于教学和实践。EJB是Java平台企业版(Java EE)的一部分,设计用于构建可扩展的、安全的、事务处理的...

    eclipse+jboss+jsp.rar

    标题 "eclipse+jboss+jsp.rar" 涉及到的是一个关于如何在Eclipse集成开发环境中配置和使用JBoss应用服务器以及开发JSP应用程序的综合教程。这个压缩包包含了多个指南和步骤文档,帮助开发者了解和实践相关配置。 ...

    myEclipse+Jboss+mysql+EJB

    【标题】"myEclipse+Jboss+mysql+EJB"是一个综合性的开发环境配置,它涵盖了四个关键组件:myEclipse、Jboss、mysql和EJB。这些组件在IT行业中都扮演着重要的角色,尤其在企业级Java应用的开发与部署上。 ...

    Jboss7.1.1+eclipse-kepler开发ejb3

    根据文件信息,以下是关于Jboss7.1.1与eclipse-kepler集成并开发ejb3的知识点。 首先,环境搭建方面,需要准备 JDK 1.5 或更高版本,并安装 Eclipse Kepler(版本4.3)。接着,下载并解压 Jboss7.1.1 到指定文件夹...

    经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part1

    经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part1 其他部分详见我的上传列表,全部分卷下载完成才能解压。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    《经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发》介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则包含Session Bean、Message Driven Bean的...

Global site tag (gtag.js) - Google Analytics