程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Hibernate常用注解,hibernate注解

Hibernate常用注解,hibernate注解

編輯:關於.NET

Hibernate常用注解,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關聯映射中有效。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved