本文为原创,如需转载,请注明作者和出处,谢谢!
EJB3的一对多映射使用@OneToMany来设置,如果是双向的一对多映射,在many方需要使用@ManyToOne设置。在本书中给出两个表,其他一个表t_customers在上一篇文章中已给出了,另一个表的结构如图1所示。
图1 t_orders表
t_customers和t_orders表是一对多关系,一个Customer可能有多个Order,而一个Order只能有一个Customer。
在Customer类中需要定义一个集合类型的属性,用来保存多个Order对象,Customer类的代码如下:
- 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类的代码如下:
- 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表的外键名。
可以使用下面的代码进行测试:
- 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方法修改成下的形式:
- @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;
- }
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->
其中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+MySql开发EJB
eclipse + JBoss 5 + EJB3开发指南(转载整理)
[6] 使用 Eclipse 建立第一个 EJB3 Project [ 即 HelloWorld ]: 18 [7] 建立 HelloWorld Stateless Session Bean 及 Local, Remote interfaces: 19 [8] 建立客户端测试程序: 20 [9] 使用 ANT 建立 EJB-JAR 并...
eclipse + JBoss 5 + EJB3开发指南中的代码 下载PDF文档资料后可以和本资料一起学习
非常好的指导Eclipse下通过JBOSS开发EJB的入门指导书, 通过原作者的实际使用总结得到,简洁易懂。
Eclipse+jboss的配置Eclipse+jboss的配置Eclipse+jboss的配置Eclipse+jboss的配置Eclipse+jboss的配置Eclipse+jboss的配置
使用eclipse通过jboss开发简单的ejb应用(jboss7.x & ejb3.x),包含server和client。
Eclipse+JBoss+MySQL开发环境设置.pdf
手把手系列-Eclipse+JBossIDE+JBoss开发环境配置
ejb+jboss+eclipse.txt ejb+jboss+eclipse.txt ejb+jboss+eclipse.txt ejb+jboss+eclipse.txt ejb+jboss+eclipse.txt
广东工业大学Java EE Web编程技术课程实验,使用JBoss,实现EJB技术中的会话Bean,简单的Helloworld。
EJB3+JBOSS5+JPA整合,里面还用到了ejb3注解。
yeclipse7.0+JBoss5.0测试EJB3.0环境搭建过程详解
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part1 其他部分详见我的上传列表,全部分卷下载完成才能解压。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun...
myEclipse+Jboss+mysql+EJB
EJB3.0第五版电子书,开发环境是eclipse+jboss+mysql
《经典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的...
Jboss7.1.1+eclipse-kepler开发ejb3 使用eclipse4.3即kepler版本来集成jboss tools工具并使用jboss7.1.1来开发ejb3.1
经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 part3
ejb课程测试代码,eclipse+jboss5.1 ant编译等代码 三个测试项目请下载