hibernate注解配置与xml文件配置(一)

#hibernate注解配置与xml文件配置(基础)

注解配置

类级别注解

####@Entity(映射实体类)

  • @Entity(name = “tableName”) name:可选,对应数据库中的一个表,若表名和实体类名相同,则可以省略
  • 使用@Entity时需要指定实体类的主键属性(通过在某个属性的getter方法上加上@Id实现)

####@Table

  • 与@Entity配置使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息
  • name:可选,映射表的名称,默认表名和实体名称一致,只有在不一致的情况下才需要指定表名
  • catalog:可选,表示Catalog名称
  • schema:可选,表示Schema名称(相当于数据库名(但这样又不会去创建一个新的数据库))
  • @Embeddable表示一个非Entity类可以嵌入到另一个Entity中作为属性存在,即一个用户自定义的类型可以作为数据库表的属性(定义在自定义类的.class处)

属性级别注解

添加方法

  • 写在属性字段
  • 写在属性的get访问器上面

@Id

  • 必须,定义了映射到数据库表的主键的属性,一个实体类可以有一个或者多个属性被映射到主键,可置于主键属性或者其getter前
  • 如果是联合主键,该实体类必须实现 Serializable

@GeneratedValue

@GeneratedValue(strategy=GenerationType,generator=””):可选,用于定义主键生成策略。取值有:

  • GenerationType.AUTO:根据底层数据库自动选择(默认)
  • GenerationType.INDENTITY:根据数据库的Identity字段生成
  • GenerationType.SEQUENCE:使用Sequence来决定主键的取值
  • GenerationType.TABLE:使用指定表来决定主键取值,结合@TableGenerator使用

@Column

可将属性映射到列,使用该注解来覆盖默认值,@Column描述了数据库表中该字段的详细定义

  • name:可选,表示数据库表中该字段的名称,默认情形属性名称一致。
  • Nullable:可选,表示该字段是否允许为null,默认为true。
  • Unique:可选,表示该字段是否是唯一标识,默认为false。
  • Length:可选,表示该字段的大小,仅对String类型的字段有效,默认值255。
  • Inserable:可选,表示在ORM框架执行插入操作时,该字段是否应出现INSERT语句中,默认为true。
  • Updateable:可选,表示在ORM框架执行更新操作时,该字段是否应该出现在UPDATE语句中,默认为true。对于一经创建就不可以更改的字段,改属性非常有用

@Embedded

@embedded是注释属性的,表示该属性的类是嵌入类,注意:同时嵌入类也必须标注@Embeddable

@EmbeddedId

@EmbeddedId使用嵌入式主键类实现复合主键。嵌入式主键类必须实现Serializable接口,必须有默认的public无参的构造方法、必须覆盖equals和hashCode方法。

@Transient

可选,表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性,如果一个属性并非数据库表的字段映射,就务必将其表示标志为@Transient,否则ORM框架默认其注解为@Basic

hbm.xml配置

主键

  • assigned

    主键由外部程序负责生成,在save() 之前指定。

  • hilo
    通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。

  • seqhilo
    与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。

  • increment
    主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。

  • identity
    采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。

  • sequence
    采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence。

  • native
    由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。

  • uuid.hex
    由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。

  • uuid.string
    与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据中。

  • foreign
    使用另外一个相关联的对象的标识符作为主键。

普通属性(property)

它的各属性中比较常用的有:

  • name(对应的Java类的属性名称)
  • column(对应的表中的字段)
  • type(属性的类型,eg.java.lang.String)
  • not-null(设置该属性是否为空,为true时表示非空,默认为false)
  • length(字段的长度限制)。