hibenrnate Annotation映射值类型集合
假定Customer类有一个集合属性images,用来存放所有照片的文件名。
/***集合中存放的是值类型对象。值类型是相对于实体类型来讲的。区别在于无OID,无自己的生命周期*/private Set<String> images=new TreeSet<String>();
?
按照集合的数据结构划分,java集合可分为三类。
Set:集合中的对象不按特点方式排序,并且没有重复对象。它的有些实现类(如TreeSet)能对集合中的对象按特定方式排序。List:集合中的对象按索引位置排序,可以有重复对象,允许按照集合中的索引位置检索对象。元素集合可用@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; }
?