posts - 0, comments - 77, trackbacks - 0, articles - 356
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

EJB学习日记(15)

Posted on 2007-10-12 10:45 semovy 阅读(252) 评论(0)  编辑  收藏 所属分类: EJB
EJB中的集合映射

我们在前面的一对多以及多对多的情况可以看到,我们会需要对集合进行映射,对于基于List的映射我们在前面已经看过了。但是如果我们想对Map进映射呢,那该怎么办?

其实JPA已经帮我们设计好了。那就是利用@MapKey来进行注释。

我们还是先要看看MapKey的代码吧:

package javax.persistence;

@Target({METHOD, FIELD}) @Retention(RUNTIME)
public @interface MapKey
{
   String name( ) 
default "";
}

应用如下:

@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它只有一个方法,那就是指定名字,并且指定的名字必须是它所在的实体的成员,否则的话就识别不了了,如果我们留空的话,那默认的key就是这个实体类的主键。用它的好处就是,我们有时候对于这个实体来说,仅仅需要知道的是它的某一部份,并且我们希望利用这一部分来进行对实体的操作以及辨别。这样用Map就比用List方便一些了。

        在此我们只是在以前一对多的基础上改了一点点而已,以前一对多的时候,没有@MapKey的注释,那么它返回的就是一个List,现在我们加了@MapKey的注释,这样EntityManager来进行操作的时候,就会自动把我们的实体列表根据我们所指定的Key生成一个Map了。在某些情况下用Map确实比用List要方便许多。


只有注册用户登录后才能发表评论。


网站导航: