读书人

hibenrnate Annotation投射值类型集合

发布时间: 2012-10-05 15:34:34 作者: rapoo

hibenrnate Annotation映射值类型集合

假定Customer类有一个集合属性images,用来存放所有照片的文件名。

/***集合中存放的是值类型对象。值类型是相对于实体类型来讲的。区别在于无OID,无自己的生命周期*/private Set<String> images=new TreeSet<String>();

?

按照集合的数据结构划分,java集合可分为三类。

Set:集合中的对象不按特点方式排序,并且没有重复对象。它的有些实现类(如TreeSet)能对集合中的对象按特定方式排序。List:集合中的对象按索引位置排序,可以有重复对象,允许按照集合中的索引位置检索对象。

Map:集合中的每一个元素包含一个键对象和值对象。集合中没有重复的建对象,值对象可以重复。它的有些实现类(如TreeMap)能对集合中的键对象按特点方式排序

元素集合可用@CollectionOfElements来注解(作为@OneToMany的替代). 为了定义集合表(译注:即存放集合元素的表,与下面提到的主表对应),要在关联属性上使用@JoinTable注解, joinColumns定义了介乎实体主表与集合表之间的连接字段(inverseJoincolumn是无效的且其值应为空). 对于核心类型的集合或基本类型数组,你可以在关联属性上用?映射set集合

@Entity@Table(name="customers")public class Customer implements Serializable {    private Long id;    private String name;    private int age;    private Set<String> images=new TreeSet<String>();    @Id    @GeneratedValue(strategy=GenerationType.AUTO)    public Long getId() {        return this.id;    }    public void setId(Long id) {        this.id = id;    }    @CollectionOfElements()    @JoinTable(name="IMAGES",joinColumns={@JoinColumn(name="CUSTOMER_ID")})    @Column(name="filename",nullable=false)public Set<String> getImages() {return images;}public void setImages(Set<String> images) {this.images = images;}}
?映射bag包

bag集合中的对象可以重复,但不按特定方式排序。hibernate允许你用list来模拟bag行为。

    @CollectionOfElements    @CollectionId(columns = @Column(name="imageid",nullable=false), type=@Type(type="long"), generator = "sys-increment")     @GenericGenerator(name="sys-increment",strategy="increment")    @JoinTable(name="IMAGES",joinColumns={@JoinColumn(name="CUSTOMER_ID")})    @Column(name="FILENAME")public List<String> getImages() {return images;}public void setImages(List<String> images) {this.images = images;}

?

?映射LIST列表

集合中的对象可以重复,并且按索引位置排序

?

    @CollectionOfElements    @JoinTable(name="images",joinColumns={@JoinColumn(name="customerid")})    @IndexColumn(name = "imageid")    @Column(name="filename",nullable=false)    public List<String> getImages() {        return this.images;    }    public void setImages(List<String> images) {        this.images = images;    }

映射map

    @CollectionOfElements    @org.hibernate.annotations.MapKey(columns={@Column(name="image_name",nullable=false)})    @JoinTable(name="images",joinColumns={@JoinColumn(name="customerid")})    @Column(name="filename",nullable=false)    @Sort(type=SortType.NATURAL)    public Map<String,String> getImages() {        return this.images;    }    public void setImages(Map<String,String> images) {        this.images = images;    }

??映射组件类型集合

映射方式和以上大致相同。以map举例。

@Embeddablepublic class Image implements Serializable {    //private String name;    private String filename;    private int sizeX;    private int sizeY;    private Customer customer;}

?

@CollectionOfElements     @MapKey(columns={@Column(name = "name",nullable=false)})    @JoinTable(name="IMAGES",joinColumns={@JoinColumn(name="CUSTOMER_ID",nullable=false)})   /* 不可与@MapKey一起使用?以下一般用来复写组件类的属性    * @AttributeOverrides({    //@AttributeOverride(name="element.name",column=@Column(name="IMAGE_NAME")),    @AttributeOverride(name="element.filename",column=@Column(name="FILENAME")),    @AttributeOverride(name="element.sizeX",column=@Column(name="SIZEX")),    @AttributeOverride(name="element.sizeY",column=@Column(name="SIZEY"))    })*/    public Map<String,Image> getImages() {        return this.images;    }

?

读书人网 >开源软件

热点推荐