日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Eclipse+JBoss+EJB3實(shí)現(xiàn)EntityBean的一對(duì)一映射

一對(duì)一映射是很常用的。在一般情況下,一個(gè)主表通過(guò)外鍵和從表形成一對(duì)一的關(guān)系。在EJB3中使用@OneToOne注釋來(lái)映射。一對(duì)一關(guān)系除了使用外鍵進(jìn)行關(guān)聯(lián)外,也可以采用共享主鍵的方式連接兩個(gè)表。先看看如下兩個(gè)表的結(jié)構(gòu):

創(chuàng)新互聯(lián)是一家專(zhuān)業(yè)提供平泉企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、H5場(chǎng)景定制、小程序制作等業(yè)務(wù)。10年已為平泉眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)的建站公司優(yōu)惠進(jìn)行中。

圖1  t_customers

圖2  t_referees

t_customers和t_referees表形成了一對(duì)一的關(guān)系。t_customers表通過(guò)referee_id與t_referees表相連。與t_customers表對(duì)應(yīng)的實(shí)體Bean的代碼如下:

 
 
 
 
  1. package entity;  
  2.  
  3. import java.util.Collection;  
  4. import javax.persistence.Entity;  
  5. import javax.persistence.FetchType;  
  6. import javax.persistence.GeneratedValue;  
  7. import javax.persistence.GenerationType;  
  8. import javax.persistence.Id;  
  9. import javax.persistence.JoinColumn;  
  10. import javax.persistence.OneToOne;  
  11. import javax.persistence.Table;  
  12.  
  13. @Entity 
  14. @Table(name = "t_customers")  
  15. public class Customer  
  16. {  
  17.     private int id;  
  18.     private String name;  
  19.     private Referee referee;  
  20.  
  21.     @Id 
  22.     @GeneratedValue(strategy = GenerationType.IDENTITY)  
  23.     public int getId()  
  24.     {  
  25.         return id;  
  26.     }  
  27.     public void setId(int id)  
  28.     {  
  29.         this.id = id;  
  30.     }  
  31.  
  32.     public String getName()  
  33.     {  
  34.         return name;  
  35.     }  
  36.  
  37.     public void setName(String name)  
  38.     {  
  39.         this.name = name;  
  40.     }  
  41.  
  42.     @OneToOne 
  43.     public Referee getReferee()  
  44.     {  
  45.         return referee;  
  46.     }  
  47.     public void setReferee(Referee referee)  
  48.     {  
  49.         this.referee = referee;  
  50.     }  
  51. }  

從上面的代碼可以看出,getReferee方法使用了@OneToOne進(jìn)行設(shè)置。在裝載Customer對(duì)象的同時(shí),Referee對(duì)象會(huì)被同時(shí)裝載,而默認(rèn)的外鍵字段就是Customer類(lèi)中的referee屬性名 + "_" + id,也就是referee_id。下面看一下與t_referees表對(duì)應(yīng)的實(shí)體Bean代碼:

 
 
 
 
  1. package entity;  
  2.  
  3. import javax.persistence.Entity;  
  4. import javax.persistence.GeneratedValue;  
  5. import javax.persistence.GenerationType;  
  6. import javax.persistence.Id;  
  7. import javax.persistence.JoinColumn;  
  8. import javax.persistence.OneToOne;  
  9. import javax.persistence.Table;  
  10.  
  11. @Entity 
  12. @Table(name="t_referees")  
  13. public class Referee  
  14. {  
  15.     private int id;  
  16.     private String name;  
  17.     private Customer customer;  
  18.     @OneToOne(mappedBy="referee")  
  19.     public Customer getCustomer()  
  20.     {  
  21.         return customer;  
  22.     }  
  23.  
  24.     public void setCustomer(Customer customer)  
  25.     {  
  26.         this.customer = customer;  
  27.     }  
  28.  
  29.     @Id 
  30.     @GeneratedValue(strategy = GenerationType.IDENTITY)  
  31.     public int getId()  
  32.     {  
  33.         return id;  
  34.     }  
  35.     public void setId(int id)  
  36.     {  
  37.         this.id = id;  
  38.     }  
  39.     public String getName()  
  40.     {  
  41.         return name;  
  42.     }  
  43.  
  44.     public void setName(String name)  
  45.     {  
  46.         this.name = name;  
  47.     }  
  48. }  

Referee類(lèi)使用了customer屬性映射了Customer對(duì)象,實(shí)際上,這是一個(gè)雙向的one-to-one映射。這時(shí),在Referee類(lèi)的customer屬性的getter方法的@OneToOne注釋中,需要使用mappedBy屬性來(lái)指定主表(Customer)中的映射從表的屬性名(referee)。

我們可以使用下面的代碼進(jìn)行測(cè)試:

 
 
 
 
  1. System.out.println(em.find(Referee.class1).getCustomer().getName());  
  2. Customer customer = new Customer();  
  3. customer.setName("微軟");  
  4. Referee referee = new Referee();  
  5. referee.setName("趙軍");  
  6. em.persist(referee);          
  7. customer.setReferee(referee);  
  8. em.persist(customer); 

如果要覆蓋默認(rèn)的名鍵名,例如,外鍵名為referee1_id,可以?xún)煞N方法使EJB3容器使用新的外鍵:

1.  修改Customer類(lèi)中的referee屬性的getter和setter方法為getReferee1和setReferee1,并將Referee類(lèi)中mappedBy屬性的值修改成referee1。

2.  使用@JoinColumn注釋設(shè)置新的外鍵名,這種方法只需要修改Customer類(lèi)的getReferee方法上面注釋即可,代碼如下:

 
 
 
 
  1. @OneToOne 
  2. @JoinColumn(name="referee1_id")  
  3. public Referee getReferee()  
  4. {  
  5.     return referee;  
  6. }    

one-to-one關(guān)系還可以共享主鍵,也就是一個(gè)表的主鍵的值依賴(lài)于另一個(gè)表的主鍵的值。因此,在這種情況下,就不再需要t_customers表中的referee_id字段了。由于t_referees表的id字段值依賴(lài)于t_customers表的id字段值,因此,需要將t_referees表中的id字段值的自增類(lèi)型去掉。

在EJB3中使用@PrimaryKeyJoinColumn注釋來(lái)實(shí)現(xiàn)主鍵的共享。首先需要修改Customer類(lèi)的getReferee方法上方的注釋?zhuān)薷暮蟮拇a如下:

 
 
 
 
  1. @OneToOne(cascade=CascadeType.ALL)  
  2. @PrimaryKeyJoinColumn 
  3. public Referee getReferee()  
  4. {  
  5.     return referee;  
  6. }    然后要修改Referee類(lèi)中的getCustomer和getId方法上方的注釋?zhuān)薷暮蟮拇a如下:  
  7. @OneToOne 
  8. @PrimaryKeyJoinColumn 
  9. public Customer getCustomer()  
  10. {  
  11.     return customer;  
  12. }  
  13.  
  14. @Id 
  15. @GeneratedValue(generator = "pkGenerator")  
  16. @GenericGenerator(name = "pkGenerator", strategy = "foreign",   
  17.    parameters = @Parameter(name = "property", value = "customer"))  
  18. public int getId()  
  19. {  
  20.     return id;  
  21. }  

其中@GenericGenerator注釋表示這個(gè)id屬性是外鍵,并且依賴(lài)于customer屬性對(duì)應(yīng)的實(shí)體Bean的id屬性值(主鍵值)。

另外還要注意一點(diǎn),由于t_referees表的id的自增類(lèi)型已經(jīng)去掉,而且該值依賴(lài)于t_customers表的id字段值,因此,就不能直接持久化Referee對(duì)象了,而在持久化Customer對(duì)象的同時(shí),EJB3容器會(huì)自動(dòng)將Referee持久化的。

【編輯推薦】

  1. Eclipse+JBoss+EJB3配置文件發(fā)布Session Bean
  2. Eclipse+JBoss+EJB3編寫(xiě)有狀態(tài)的SessionBean
  3. Eclipse+JBoss+EJB3的Session Bean注釋方法
  4. Eclipse+JBoss+EJB3使用Session Bean的本地接口
  5. Eclipse+JBoss+EJB3編寫(xiě)第一個(gè)實(shí)體Bean程序
     

分享標(biāo)題:Eclipse+JBoss+EJB3實(shí)現(xiàn)EntityBean的一對(duì)一映射
文章分享:http://www.5511xx.com/article/coiccsc.html