`
shyf12054213
  • 浏览: 33957 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

hibenrnate Annotation映射值类型集合

阅读更多

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

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

 

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

  • Set:集合中的对象不按特点方式排序,并且没有重复对象。它的有些实现类(如TreeSet)能对集合中的对象按特定方式排序。
  • List:集合中的对象按索引位置排序,可以有重复对象,允许按照集合中的索引位置检索对象。
  • Map:集合中的每一个元素包含一个键对象和值对象。集合中没有重复的建对象,值对象可以重复。它的有些实现类(如TreeMap)能对集合中的键对象按特点方式排序

元素集合可用@CollectionOfElements来注解(作为@OneToMany的替代). 为了定义集合表(译注:即存放集合元素的表,与下面提到的主表对应),要在关联属性上使用@JoinTable注解, joinColumns定义了介乎实体主表与集合表之间的连接字段(inverseJoincolumn是无效的且其值应为空). 对于核心类型的集合或基本类型数组,你可以在关联属性上用@Column来覆盖存放元素值的字段的定义. 你还可以用@AttributeOverride来覆盖存放可内嵌对象的字段的定义. 要访问集合元素,需要将该注解的name属性值设置为"element"("element"用于核心类型,而"element.serial" 用于嵌入式对象的serial属性).要访问集合的index/key,则将该注解的name属性值设置为"key".

 映射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举例。

@Embeddable
public 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;
    }

 

分享到:
评论

相关推荐

    Annotation属性值

    Annotation 属性值可以分为基本类型、数组类型、枚举类型等多种类型。 基本类型是最简单的 Annotation 属性值类型,例如: ```java public @interface UserdefinedAnnotation { int value(); String name(); ...

    Hibernate_Annotation关联映射

    Hibernate Annotation几种关联映射 一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键...

    Hibernate关联关系的CRUD和集合映射(annotation)

    本文将深入探讨Hibernate中的关联关系、CRUD操作以及集合映射(基于注解的方式)。关联关系是数据库设计中的核心概念,而Hibernate通过注解使得这种关系在代码中得以体现,简化了开发工作。 ### Hibernate关联关系 ...

    Hibernate继承映射(annotation)

    **一、Hibernate继承映射类型** 1. **单表继承(Single Table Inheritance)** - 这种策略将所有继承类的数据存储在一个单一的表中,通过一个特殊字段(通常是`discriminator_column`)来区分不同类的实例。 - ...

    compass annotation关联关系

    在 Compass 中,Annotation 是一种元数据注解方式,它允许开发者在对象模型上直接定义搜索映射,使得对象与索引之间的关系更加清晰,简化了搜索引擎的集成工作。 一、Compass Annotation 概述 Compass Annotation ...

    annotation httpClient(annotation类型应用程序设计举例)

    文档由五篇博客组成,说明了如何使用代理技术实现Annotation HttpClient通过,阅读这五篇博客,应该能够大致了解如何实现一个Annotation类型应用的框架。此外,配备了相应的Annotation HttpClient的源码,以供大家...

    Hibernate Annotation jar

    已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用xml文件来映射更具有可读性,自我感觉以后Hibernate Annotation的映射方式将代替hibernate 的*.hbm....

    annotation(java注解类型,区别)

    1. **类型注解(Type Annotation)** 类型注解可以在类、接口、枚举、变量、方法和参数类型上使用。它们提供了对类型层次结构的元信息,例如`@NonNull`用于表示参数或返回值不应为null。自Java 8起,类型注解可以...

    Hibernate组件映射(annotation/xml)

    3. 更强的类型安全:相比直接使用基本类型或字符串,组件映射提供了更强的类型检查和验证。 五、注意事项 1. 组件映射的字段在数据库中可能需要额外的级联操作(如级联保存、删除)。 2. 如果组件类包含复杂的关联...

    Annotation技术

    Annotation类型可以包含成员,这些成员通常是没有参数的方法,其返回类型限制为基本类型、字符串、Class、枚举、Annotation或它们的数组。成员可以有默认值。例如: ```java public @interface MyAnnotation { ...

    hibernate应用[包括示例,映射,主键自增,各种查询操作方式以及配置文档以及 Annotation示例]

    - **Hibernate集合映射之Map-----element映射实体类型值.doc、Hibernate集合映射之Map-----element映射基本类型值.doc**:讨论了如何映射Java集合到数据库表,特别是使用Map类型和Element元素。 - **Hibernate with ...

    Annotation手册

    3. **Annotation类型**:Annotation类型是一种接口,定义了Annotation的结构和默认值。在Java中,通过`@interface`关键字声明Annotation类型,其中的成员变量是固定的,没有方法参数。当我们通过反射API访问...

    hibernate annotation 中文文档

    《Hibernate Annotation 中文文档》是Java开发者们的重要参考资料,它详细介绍了如何在Hibernate框架中使用注解进行对象关系映射(ORM)。Hibernate是一款强大的开源Java持久化框架,它简化了数据库与Java对象之间的...

    JAVA 标注annotation

    annotation 的7种标注类型。nnotation提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、类型、构造方法、方法、成员变量、参数、...

    Hibernate Annotation 中文文档

    随着技术的发展,Hibernate Annotation逐渐成为主流,因为它提供了更直观、更简洁的方式来映射对象关系模型(ORM)。这篇文档主要讨论的是Hibernate Annotation的使用方法,以及它如何替代传统的XML配置文件(*.hbm....

    Annotation详细介绍(大全)

    枚举可以用于限制Annotation参数的取值范围,如`name() default MyName.MLDN`,确保参数只能取自定义的枚举类型中的某个值。 7. **Rentention和RententionPolicy**: `@Retention` Annotation用来控制Annotation...

    annotation

    - **Annotation成员**:注解的成员以无参数的方法形式声明,方法名对应成员名,返回类型对应成员值的类型。注解成员可有默认值,通过`default`关键字指定。 #### 四、Annotation的使用示例 假设我们定义了一个注解...

    JDK5.0 Java Annotation 介绍(ppt)

    2. **代码生成**:通过 Annotation,工具可以自动生成代码,如 ORM 框架中的 Hibernate 使用 Annotation 生成数据库映射代码。 3. **运行时行为控制**:如 Spring 框架中的 `@Autowired` 用于自动装配依赖。 4. **...

Global site tag (gtag.js) - Google Analytics