亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

eclipse + JBoss 5 + EJB3開發指南(8):實現E

系統 1727 0
本文為原創,如需轉載,請注明作者和出處,謝謝!

上一篇: 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 /> --> 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 Stringname;
private Refereereferee;
private Collection < Order > orders;

@OneToMany(mappedBy = " customer " ,cascade = CascadeType.ALL)
public Collection < Order > getOrders()
{
return orders;
}
public void setOrders(Collection < Order > orders)
{
this .orders = orders;
}
@Id
@GeneratedValue(strategy
= GenerationType.IDENTITY)
public int getId()
{
return id;
}
... ...
}
其中@OneToMany的mappedBy屬性指定了Order類中獲得Customer對象的屬性名。Order類的代碼如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package entity;

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

@Entity
@Table(name
= " t_orders " )
public class Order
{
private int id;
private StringproductId;
private int count;
private Customercustomer;

@ManyToOne
@JoinColumn(name
= " customer_id " )
public CustomergetCustomer()
{
return customer;
}

public void setCustomer(Customercustomer)
{
this .customer = customer;
}

@Id
@GeneratedValue(strategy
= GenerationType.IDENTITY)
public int getId()
{
return id;
}
... ...


}
其中@JoinColumn注釋的name屬性指定t_orders表中用于連接t_customers表的外鍵名。
可以使用下面的代碼進行測試:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> Customercustomer = new Customer();
customer.setName(
" 微軟 " );
List < Order > orders = new ArrayList < Order > ();
Orderorder
= new Order();
order.setProductId(
" 1234 " );
order.setCount(
20 );
order.setCustomer(customer);
orders.add(order);
order
= new Order();
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 " ))
public Collection < Order > getOrders()
{
return orders;
}

其中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 5 + EJB3開發指南(8):實現Entity Bean的一對多(one-to-many)映射


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天码毛片一区二区三区入口 | 亚洲伊人久久大香线蕉结合 | 日韩国产成人资源精品视频 | 国产黄色一级大片 | 免费刺激性视频大片区 | 狠狠色狠狠色综合网 | 久久综合免费 | 国产综合久久久久久 | 久久精品国产精品亚洲毛片 | 国产99在线播放免费 | 爱爱视频天天看 | 天天色综合色 | 日韩欧美在线一级一中文字暮 | 精品国产一区二区三区四区不 | 成人免费毛片一区二区三区 | 欧美精品福利在线视频 | 一道本不卡免费视频 | 久热精品免费 | 色老头xxxwww作爱视频 | 亚洲人成网站在线观看青青 | 精品国产一区二区三区四区色 | 免费一级毛片在线视频观看 | 日韩欧美视频一区 | 亚洲精品9999久久久久 | 在线视频 国产交换 | 福利视频午夜 | 欧美高清一区二区三区欧美 | 一区二区三区在线观看视频 | 国产亚洲漂亮白嫩美女在线 | 欧洲成人在线视频 | 偷偷操99 | 高清欧美日本视频免费观看 | 一本大道高清香蕉中文大在线 | 五月久久婷婷综合片丁香花 | 91在线 | 亚洲 | 色中文字幕在线 | 成人欧美精品一区二区不卡 | 成人影院高清在线观看免费网站 | 久久国产精品久久国产片 | 久久国产欧美 | 奇米影音第四色 |