Hibernate常用注解

一、类注解

  1、@entity修饰一个实体类,接受一个name属性作为该实体类名称,可看略默认为该类名

  2、@Table点名持久化类所投的表名,可领以下属性

    catalog:可略,用于安装以持久化类所投的表放入指定的catalog中,若省略,则放入默认的catalog中。

    indexs:可概括,为持久化类设置索引,属性值为一个@index注解数组

      @index :用于为数据表设置索引,接受以下熟悉

        columnList
不可省略,设置对那些列建立目录,可指定多只数据列,指定多独列时用逗号将大半个列隔开。如:@Index(columnList
= “id,name,pass”),同时也id,name,pass设置索引。

        name:索引名,可省略

        unique:可粗略,设置该索引是否唯一,只能取得,true
或false,默认true

    name:  该实体类所投的表名,若省略,默认与类名一致。

    schema:将拖欠持久化所投的表放入schema中,若省略则放入默认schema中。

    uniqueConstraints:为持久化类所投的说明指定唯一约束,值吗一个@UniqueConstraint注解数组。可概括。

      @UniqueConstraint:为数据表制定唯一约束,需点名一个columnNames属性,该属性也一个字符串数组。

  3.@Access用于转移Hibernate的性能访问策略,属性支持AccessType.PROPERTY, AccessType.FIELD,默认为AccessType.PROPERTY

      AccessType.PROPERTY:使用getter/setter方法访问属性。

      AccessType.FIELD:直接通过分子变量访问属性。 

  4.@DynamicInsert:指定用于插入时的SQL语句是否当运行是动态变化,并且就插入那些非空字段,默认false,开启将致hibernate花费更多日来生成SQL语句。

  5.@DynamicUpdate:指定用于更新时之SQL语句是否当运行是动态变化,并且只是更新那些易了字段,默认false,开启将招致hibernate花费更多时间来生成SQL语句。

  6.@SelectBeforeUpdate:指定hibernate在创新时持久化对象时是不是先进行同样不好询问,默认false。若查询的状态及时状态一样则不见面调用update保存状态。

  7.@Where:该注解的clause特性可指定一个附加的SQL语句过滤条件,即以用load()或者get()和其他查询艺术时,只有切合该where条件的才见面受加载。该注解只见面在查询时生效。

  8.@BatchSize:当hibernate抓取集合或者延缓加载时,指定每次加载size数量。

  9.@OptimisticLocking:指定乐观锁策略,该注解的type属性接受

    OptimisticLockType.VERSION:检查version/timestamp字段

    OptimisticLockType.ALL:检查全字段

    OptimisticLockType.DIRTY:之检查修改了之字段

    OptimisticLockType.NONE:不利用乐观锁

    默认为:OptimisticLockType.VERSION

  10.@Check:通过性constraints点名一个SQL表达式,用于受相应之说明指定一个check约束。

 第二、属性注解

    1、@column点名某个属性所投的数排列的详细信息。接受一下常用属性

属性 是否必须 说明
columnDefinition 值代表一个列定义的SQL字符串,指定传见该数据列的SQL语句
insertable 指定该列是否在默认生成的iinsert语句中,默认true
length 指定该列最大保存的数据长度默认255
name 指定该列的列名默认与@Column修饰的
nullable 指定该列是否允许为null,默认true 
precisoon  当该列是decimal类型时,该属性指定该列的最大有效数字位
scale  否  当该列是decimal类型时,该属性指定该列的最大的小数位数 
table  否  指定该列所属的表名。用多个表保存一个实体时需要该属性。 
unique  否  指定该列是否需要唯一属性,默认false 
updatable  指定该列是否包含在hibernate所生成的update语句列表中,默认true 
     

    2、@Formula:该注解的value属性经受一个SQL表达式,被欠注解修饰的字段会依据此SQL计算,持久化表中尚无同此属性对应的排列。该属性只会以读取是立竿见影

      注意:value=“(SQL)”中的括号不可省略

         SQL中之列名与表名都应跟数据库被的表名和列名对应

         在SQL中采取参数可以一直用目前相近的性质传入

   
 3、@Generated:设置该属性映射的排的值是否同时数据库生成,该注解的value可接受GenerationTime.NEVER(不出数据库生成),GenerationTime.ALWAYS(插入和换代时均生成),GenerationTime.INSERT(只在插入时更新),该属性需要底层数据库被有相应的触发器。在数据库生成后会见读取这些价值。

    4、@Transient:用来修饰不思量持久保存之性。

    5、@Enumerated:修饰枚举类型,该注解的value属性接受EnumType.STRING(底层保存字符串)和EnumType.ORDINAL(底层保存编号)

    6、@Lob,@Basic:修饰大数据类型属性(Clob,Blob),当属于性为byte[],Byte[],java.io.Serializable类型时@Lob会在底部映射Blob列,当属性为char[],Character[],java.lang.String时@Lob会在底部映射为Clob列。

      @Basic纳下面两单特性:

        fetch:是否推迟加载,该属性接受FetchType.EAGER(立即加载)、FetchType.LAZY(延迟加载)

        optional:指定映射列是否同意利用null。

    7、@Temporal:用于修饰日期类型,该注解的value接受三只价:

        TemporalType.TIME(只取时间有),TemporalType.DATE(只取日期有),TemporalType.TIMESTAMP(时间穿)

  老三、主键生成相关

      对于主键使用@Id简短标注即可,不需外性质

      可使用@GeneratedValue来修饰实体的号属性,可指定如下属性:

        strategy:指定hibernate的主键生成策略,可以简单,接受下列四只价:

          GenerationType.AUTO自动选择适用的平底数据库逐渐转策略,这是默认值。

          GenerationType.INDENTITY:对于MYSQL,SQL
Server这样的数据库,选择从增长的生成策略。

          GenerationType.SEQUENCE:对于Oracle这样因Sequence的主键生成策略。应与@SequenceGenerator一起利用。

          GenerationType.TABLE:使用辅助表来扭转主键,应与@TableGenerator一起下。

         
generator:当用GenerationType.SEQUENCE或GenerationType.TABLE时指定生成器的称谓。

      对于@SequenceGenerator但指定下表属性:

属性 是否必须 说明
name 指定该主键生成器的名称
catalog 用于设置将持久化类所映射的表放入指定的catalog中,若省略,则放入默认的catalog中。
schema 用于设置将持久化类所映射的表放入指定的schema中,若省略,则放入默认的schema中。
initialValue 指定底层Sequence的初始值。对于Oracle该属性指定的整数值将作为定义Sequence时的start with值
sequenceName 指定底层Sequence的名称
allocationSize 指定底层Sequence每次生成主键值的个数。

 

 

 

 

 

 

对于@TableGenerator唯独指定下表属性,该注解会在脚数据库中额外生成一个辅助表。

uniqueConstraints 该属性为一个@UniqueConstraint数组,用于为辅助表创建唯一约束
name 指定该主键生成器的名称
allocationSize 指定底层辅助表每次生成主键值的个数
catalog 用于设置将持久化类所映射的表放入指定的catalog中,若省略,则放入默认的catalog中
schema 用于设置将持久化类所映射的表放入指定的schema中,若省略,则放入默认的schema中
table 指定辅助表的名称
initialValue 将指定值作为底层辅助表的起始值。默认0.
pkColumnName 指定存放主键名的列名
pkcolumnValue 指定主键名
valueColumnName 指定存放主键值的列名
indexs 指定一个@Index数组,为辅助表创建索引

 

 

 

 

 

 

 

 

 

    使用hibernate的@GenericGenerator注定义主键生成器,该注解接受两单参数:

      name:必须属性。设置该生成器的名,该名可以让@GeneratedValue的generator属性引用。

      strategy:必须属性。设置该生成器的主键生成策略。接受以下值:

        increment:为long,int,short生成唯一标识,只能在无任何进程往同一个表中插入时才能够以。集众多中毫无使用!

        identity:在DB2、MySql、SQL
Server、Sybase和HypersonicSQL等发供identity(自增长)的数据库中适用。

        Sequence:在DB2、PostgreSQL、Oracle、SAP
DB、McKoi等来提供Sequence支持之数据库中适用。

        hilo:使用一个高/低位算法来生成long、int、short类型的标识符,该标识符在一个数据库被是绝无仅有的。

        seqhilo:使用一个高/低位算法来生成long、int、short类型的标识符,需要为一定一个Sequence名,该属性适用及提供Sequence的数据库。

        uuid:用一个128号之UUID算法来挺成字符串类型的标识符,在全网中绝无仅有。该算法根据IP地址、JVM启动日、一个计数器值(JVM中唯一)来蛮成一个32号的字符串

        guid:在SQL Server和Mysql中利用数据库生成的GUID 字符串

        native:根据底层数据库的能力选择identity、sequenec或者hilo中之一个

        assigned:让应用程序在sava之前也对象分配一个标识符。相当给不应用主键生成策略。

        select:通过触发器选择某个唯一主键的实施,并返其主键值作为标识属性值

        foreign:直接下其他一个涉及的目标的标识符属性值(即按持久化对象不转移主键)。这种政策才以根据主键的1-1涉映射中行之有效。

相关文章