EJB学习日记(15)

本文介绍了如何使用JPA中的@MapKey注解来实现Map类型的集合映射。通过示例展示了如何将实体类的属性作为Map的键,从而在一对多的关系中提供更加灵活的数据访问方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2007年10月10日 06:59:00
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要方便许多。


来自:千里冰封



Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1817686


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值