EJB中的集合映射
我們?cè)谇懊娴囊粚?duì)多以及多對(duì)多的情況可以看到,我們會(huì)需要對(duì)集合進(jìn)行映射,對(duì)于基于List的映射我們?cè)谇懊嬉呀?jīng)看過了。但是如果我們想對(duì)Map進(jìn)映射呢,那該怎么辦?
其實(shí)JPA已經(jīng)幫我們?cè)O(shè)計(jì)好了。那就是利用@MapKey來進(jìn)行注釋。
我們還是先要看看MapKey的代碼吧:
package javax.persistence;
@Target({METHOD, FIELD}) @Retention(RUNTIME)
public @interface MapKey
{
String name( ) default "";
}
應(yīng)用如下:
@Entity
public class Customer implements java.io.Serializable {

private Map<String, Phone> phoneNumbers = new HashMap<String, Phone>( );

@OneToMany(cascade={CascadeType.ALL})
@JoinColumn(name="CUSTOMER_ID")
@MapKey(name="number")
public Map<String, Phone> getPhoneNumbers( ) {
return phoneNumbers;
}
public void setPhoneNumbers(Map<String, Phone> phones)
{
this.phoneNumbers = phones;
}
}
在此我們可以看出,@MapKey它只有一個(gè)方法,那就是指定名字,并且指定的名字必須是它所在的實(shí)體的成員,否則的話就識(shí)別不了了,如果我們留空的話,那默認(rèn)的key就是這個(gè)實(shí)體類的主鍵。用它的好處就是,我們有時(shí)候?qū)τ谶@個(gè)實(shí)體來說,僅僅需要知道的是它的某一部份,并且我們希望利用這一部分來進(jìn)行對(duì)實(shí)體的操作以及辨別。這樣用Map就比用List方便一些了。
在此我們只是在以前一對(duì)多的基礎(chǔ)上改了一點(diǎn)點(diǎn)而已,以前一對(duì)多的時(shí)候,沒有@MapKey的注釋,那么它返回的就是一個(gè)List,現(xiàn)在我們加了@MapKey的注釋,這樣EntityManager來進(jìn)行操作的時(shí)候,就會(huì)自動(dòng)把我們的實(shí)體列表根據(jù)我們所指定的Key生成一個(gè)Map了。在某些情況下用Map確實(shí)比用List要方便許多。
盡管千里冰封
依然擁有晴空
你我共同品味JAVA的濃香.
posted on 2007-10-02 13:55
千里冰封 閱讀(1143)
評(píng)論(2) 編輯 收藏 所屬分類:
JAVAEE