首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

JPA 引文映射(集合类的使用)

2012-08-28 
JPA注解映射(集合类的使用)private CollectionCustomerEO customers new ArrayListCustomerEO()其

JPA 注解映射(集合类的使用)
private Collection<CustomerEO> customers = new ArrayList<CustomerEO>();
其中,加粗的部分明确指明了Collection集合对象中存放的是CustomerEO对象。这可以避免在运行时导致的一些异常。
     (2)定义时使用接口,初始化使用具体的类。
在定义集合类型时,通常使用接口如Collection、Set、List和Map等,但初始化时要明确指定所使用的类型。
?         Collection可以初始化为ArrayList或HashSet,例如:

private Collection<CustomerEO> customers = new ArrayList<CustomerEO>();或者private Collection<CustomerEO> customers = new HashSet<CustomerEO>();

?         Set可以初始化为HashSet,例如:
private Set<CustomerEO> customers = new HashSet<CustomerEO>();

?         List可以初始化为ArrayList,例如:
private List<CustomerEO> customers = new ArrayList<CustomerEO>();

?         Map可以初始化为HashMap,例如:
private Map<String,CustomerEO> customer = new HashMap<String,CustomerEO>();

     (3)集合类的选择。
这四个常用的集合类不同的区别主要有以下所示,所以根据不同的情况来确定选择适合的集合类。
?         Collection类是Set和List的父类,在未确定使用Set还是List时可使用。
?         Set集合中的对象不能有重复,并且是无序的。
?         List集合中的对象可以有重复,并且可以有序排列。
?         Map集合是带有key和value值的集合。
   三.带排序的集合
如果使用了List集合,可以同时配合注释@OrderBy使查询出来的集合类按照一定的顺序排列。例如以下代码中将按照AddressEO中的属性postcode升序排列。
@Entity@Table(name = "customer")public class CustomerEO implements java.io.Serializable {……private List<AddressEO> addresses = new ArrayList<AddressEO>();@OneToMany(mappedBy="customer")@OrderBy("postcode ASC")public List<AddressEO> getAddresses() {return addresses;} public void setAddresses(List addresses) {this.addresses = addresses;}}

在使用@OrderBy注释事应注意以下几个问题。
?         @OrderBy用于标注集合中实体对象的顺序。如果不指定,将按照实体的的主键升序排列。
?         可以同时指定多个列的排列顺序,并指定升序还是降序。例如首先按照id升序,然后按照postcode 降序排列的代码如下所示。
@OrderBy("id ASC,postcode DESC")
?         若不指定升序ASC或者降序DESC,默认为升序排列。

    四.带Key值的集合
如果使用了Map集合,可以同时配合注释@MapKey指定Map中存放的key值。例如以下代码中将AddressEO中的属性id作为key值保存在Map中。
@Entity@Table(name = "customer")public class CustomerEO implements java.io.Serializable {……private Map<Integer,AddressEO> addresses = new HashMap<Integer,AddressEO>(); @OneToMany(mappedBy="customer")@MapKey(name="id")public Map<Integer, AddressEO> getAddresses() {return addresses;} public void setAddresses(Map<Integer, AddressEO> addresses) {this.addresses = addresses;}}

在使用@ MapKey注释事应注意以下几个问题。
?         @ MapKey用于标注Map中的key值。name的值指定Map类存放哪个实体的属性作为key值。
?         若不指定key值,默认为实体的主键作为key值。

热点排行