疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Hibernate映射之List集合属性


 

         在映射值类型的Set中,Set集合不能保存重复对象,如果需要保存重复对象,此时可以使用List映射。在List集合中允许存储重复的元素,并且按照索引位置进行排序。为了能够保存List集合的索引值,在image集合中允许存储重复的元素,并且按照索引位置进行排序。为了能够保存List集合的索引值。新添加一列为position,由position和外键aid共同组成主键。表album和表image的结构及关系如图所示。
持久化类Album中的属性images集合为List类型,由ArrayList来实现List接口,代码如下
private List images=new ArrayList();
public List getImages(){return this.images;}
public void setImages(List images){this.images=images;}
在映射文件中,使用<list>元素来映射List类型的集合,其字元素<list-index>用来指定数据库中保存索引值得列,如下所示:
<list name="images" table="image" lazy="true">
<key><column name="aid" not-null="true"/></key>
<list-index colum-"position"></list-index>
<element type="string" column="name" not-null="true"/>
</list>
         <list>元素的name属性用来指定持久化类中的集合属性的名字,table用来指定该集合所对应的表格,通过lazy-“true”采用延迟加载策略,其含义与Set映射中延迟加载的含义相同。集合实例在数据库中依靠持有集合的实体外键加以辨别,使用使用<key>元素指定该集合的实体外键为aid,使用not-null指定该外键不能为空,子元素<element>用于定义该集合为值类型的集合,type用于指定集合元素的类型为string,column用于指定保存集合中元素的字段名为name。子元素<list-index>配置如下:
<list-index column="position" bass="3"></list-index>
        通过base属性可以指定起始索引值。另外如果数据库中的索引数字不连接,hibernate则将空元素添加到java列表list中。集合中元素的固定索引都保存在数据库中所以hibernate在加载时,会保证集合中的元素有固定的索引,因此在应用程序中可以通过a.getImages().get(i)有集合中元素的索引值i来取得各个元素。