hibernate註解整理

 

@Entity ——將一個類聲明爲一個實體bean(即一個持久化POJO類)        java

 

@Id ——註解聲明瞭該實體bean的標識屬性(對應表中的主鍵)。        算法

 

@Table ——註解聲明瞭該實體bean映射指定的表(table),目錄(catalog)和schema的名字        spring

 

@Column ——註解聲明瞭屬性到列的映射。該註解有以下的屬性     sql

 

name 可選,列名(默認值是屬性名)    數據庫

 

unique 可選,是否在該列上設置惟一約束(默認值false)    app

 

nullable 可選,是否設置該列的值能夠爲空(默認值false)     ide

 

insertable 可選,該列是否做爲生成的insert語句中的一個列(默認值true)    函數

 

updatable  可選,該列是否做爲生成的update語句中的一個列(默認值true)    fetch

 

columnDefinition 可選,爲這個特定列覆蓋sql ddl片斷(這可能致使沒法在不一樣數據庫間移植)     ui

 

table 可選,定義對應的表(默認爲主表)    

 

length 可選,列長度(默認值255)     

 

precision 可選,列十進制精度(decimal precision)(默認值 0)     scale 可選,若是列十進制數值範圍(decimal scale)可用,在此設置(默認值0)      

 

@GeneratedValue ——註解聲明瞭主鍵的生成策略。該註解有以下屬性     

 

strategy 指定生成的策略(JPA定義的),這是一個GenerationType。  默認是GenerationType. AUTO   主鍵由程序控制     

 

GenerationType.TABLE 使用一個特定的數據庫表格來保存主鍵     GenerationType.

 

IDENTITY 主鍵由數據庫自動生成(主要是自動增加類型)    GenerationType.

 

SEQUENCE 根據底層數據庫的序列來生成主鍵,條件是數據庫支持序列。(這個值要與generator一塊兒使用)     

 

generator 指定生成主鍵使用的生成器(多是orcale中的序列)。    

 

@SequenceGenerator ——註解聲明瞭一個數據庫序列。該註解有以下屬性   name 表示該表主鍵生成策略名稱,它被引用在@GeneratedValue中設置的「gernerator」值中      

 

sequenceName 表示生成策略用到的數據庫序列名稱。   

 

initialValue 表示主鍵初始值,默認爲0.     

 

allocationSize 每次主鍵值增長的大小,例如設置成1,則表示每次建立新記錄後自動加1,默認爲50.     

 

@GenericGenerator ——註解聲明瞭一個hibernate的主鍵生成策略。支持十三種策略。該註解有以下屬性    name 指定生成器名稱     strategy 指定具體生成器的類名(指定生成策略)。     

 

parameters 獲得strategy指定的具體生成器所用到的參數。       其十三種策略(strategy屬性的值)以下

 

1.native 對於orcale採用Sequence方式,對於MySQL和SQL Server採用identity(處境主鍵生成機制),         native就是將主鍵的生成工做將由數據庫完成,hibernate無論(很經常使用)        例:@GeneratedValue(generator = "paymentableGenerator")                 @GenericGenerator(name = "paymentableGenerator", strategy = "native")      

 

2.uuid 採用128位的uuid算法生成主鍵,uuid被編碼爲一個32位16進制數字的字符串。佔用空間大(字符串類型)。           例:@GeneratedValue(generator = "paymentableGenerator")                 @GenericGenerator(name = "paymentableGenerator", strategy = "uuid")         

 

3.hilo 要在數據庫中創建一張額外的表,默認表名爲hibernate_unque_key,默認字段爲integer類型,名稱是next_hi(比較少用)           例:@GeneratedValue(generator = "paymentableGenerator")                 @GenericGenerator(name = "paymentableGenerator", strategy = "hilo")          

 

4.assigned 在插入數據的時候主鍵由程序處理(很經常使用),這是<generator>元素沒有指定時的默認生成策略。等同於JPA中的AUTO。           例:@GeneratedValue(generator = "paymentableGenerator")                 @GenericGenerator(name = "paymentableGenerator", strategy = "assigned")          

 

5.identity 使用SQL Server和MySQL的自增字段,這個方法不能放到Oracle中,Oracle不支持自增字段,要設定sequence(MySQL和SQL Server中很經常使用)。等同於JPA中的IDENTITY           例:@GeneratedValue(generator = "paymentableGenerator")                 @GenericGenerator(name = "paymentableGenerator", strategy = "identity")          

 

6.select 使用觸發器生成主鍵(主要用於早期的數據庫主鍵生成機制,少用)           例:@GeneratedValue(generator = "paymentableGenerator")                 @GenericGenerator(name = "paymentableGenerator", strategy = "select")         

 7.sequence 調用謹慎數據庫的序列來生成主鍵,要設定序列名,否則hibernate沒法找到。           例:@GeneratedValue(generator = "paymentableGenerator")          @GenericGenerator(name = "paymentableGenerator", strategy = "sequence",            parameters = { @Parameter(name = "sequence", value = "seq_payablemoney") })     

 

8.seqhilo 經過hilo算法實現,可是主鍵歷史保存在Sequence中,適用於支持Sequence的數據庫,如Orcale(比較少用)      例:@GeneratedValue(generator = "paymentableGenerator")          @GenericGenerator(name = "paymentableGenerator", strategy = "seqhilo",            parameters = { @Parameter(name = "max_lo", value = "5") })   

 

 9.increnment 插入數據的時候hibernate會給主鍵添加一個自增的主鍵,可是一個hibernate實例就維護一個計數器,因此在多個實例運行的時候不能使用這個方法。     例:@GeneratedValue(generator = "paymentableGenerator")                  @GenericGenerator(name = "paymentableGenerator", strategy = "increnment")

 

10.foreign 使用另外一個相關的對象的主鍵。一般和<one-to-one>聯合起來使用。          例:@Id            @GeneratedValue(generator = "idGenerator")           @GenericGenerator(name = "idGenerator", strategy = "foreign",                parameters = { @Parameter(name = "property", value = "info") })           Integer id;     @OneToOne      EmployeeInfo info;     

 

11.guid 採用數據庫底層的guid算法機制,對應MySQL的uuid()函數,SQL Server的newid()函數,ORCALE的rawtohex(sys_guid())函數等    例:@GeneratedValue(generator = "paymentableGenerator")            @GenericGenerator(name = "paymentableGenerator", strategy = "guid")     

 

 12.uuid.hex 看uudi,建議用uuid替換        例:@GeneratedValue(generator = "paymentableGenerator")            @GenericGenerator(name = "paymentableGenerator", strategy = "uuid.hex")     

 

 13.sequence-identity sequence策略的擴展,採用當即檢索策略來獲取sequence值,須要JDBC3.0和JDK4以上(含1.4)版本           例:@GeneratedValue(generator = "paymentableGenerator")          

 

@GenericGenerator(name = "paymentableGenerator", strategy = "sequence-identity",                 parameters = { @Parameter(name = "sequence", value = "seq_payablemoney") })                

 

@OneToOne 設置一對一個關聯。cascade屬性有五個值(只有CascadeType.ALL好用?很奇怪),分別是CascadeType.PERSIST(級聯新建),CascadeType.REMOVE(級聯刪除), CascadeType.REFRESH(級聯刷新),CascadeType.MERGE(級聯更新),CascadeType.ALL(所有四項)       

方法一        主表: ?@OneToOne(cascade = CascadeType.ALL)         @PrimaryKeyJoinColumn        public 從表類 get從表類(){return 從表對象}         從表:沒有主表類。          注意:這種方法要求主表與從表的主鍵值想對應。    

 

方法二          主表:?@OneToOne(cascade = CascadeType.ALL)              @JoinColumn(name="主表外鍵") //這裏指定的是數據庫中的外鍵字段。             public 從表類 get從表類(){return 從表類}          從表:@OneToOne(mappedBy = "主表類中的從表屬性")//例主表User中有一個從表屬性是Heart類型的heart,這裏就填heart public 主表類 get主表類(){return 主表對象}          注意:@JoinColumn是可選的。默認值是從表變量名+"_"+從表的主鍵(注意,這裏加的是主鍵。而不是主鍵對應的變量)。    

 

方法三       主表:@OneToOne(cascade=CascadeType.ALL)             @JoinTable( name="關聯表名",         joinColumns = @JoinColumn(name="主表外鍵"),         inverseJoinColumns = @JoinColumns(name="從表外鍵"))          

 

從表:@OneToOne(mappedBy = "主表類中的從表屬性")//例主表User中有一個從表屬性是Heart類型的heart,這裏就填heart              public 主表類 get主表類(){return 主表對象}       

 

 @ManyToOne 設置多對一關聯       

方法一               @ManyToOne(cascade={CasCadeType.PERSIST,CascadeType.MERGE})       @JoinColumn(name="外鍵")        public 主表類 get主表類(){return 主表對象}       

 

方法二        @ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE})       @JoinTable(name="關聯表名",        joinColumns = @JoinColumn(name="主表外鍵"),        inverseJoinColumns = @JoinColumns(name="從表外鍵")       )     

 

@OneToMany 設置一對多關聯。cascade屬性指定關聯級別,參考@OneToOne中的說明。fetch指定是否延遲加載,值爲FetchType.LAZY表示延遲,爲FetchType.EAGER表示當即加載        

 

方法一     使用這種配置,在爲「一端」添加「多端」時,不會修改「多端」的外鍵。在「一端」加載時,不會獲得「多端」。若是使用延遲加載,在讀「多端」列表時會出異常,當即加載在獲得多端時,是一個空集合(集合元素爲0)。       「一端」配置        @OneToMany(mappedBy="「多端」的屬性")        public List<「多端」類> get「多端」列表(){return 「多端」列表}       「多端」配置參考@ManyToOne.            

 

方法二        「一端」配置        @OneToMany(mappedBy="「多端」的屬性")       @MapKey(name="「多端」作爲Key的屬性")        public Map<「多端」作爲Key的屬性的類,主表類> get「多端」列表(){return 「多端」列表}        「多端」配置參考@ManyToOne.         方法三使用這種配置,在爲「一端」添加「多端」時,能夠修改「多端」的外鍵。       「一端」配置       

 

@OneToMany     @JoinColumn(name="「多端外鍵")         public List<「多端類> get「多端列表(){return 「多端列表}       「多端配置參考@ManyToOne


@component (把普通pojo實例化到spring容器中,至關於配置文件中的<bean id="" class=""/>)

@Autowired  完成自動裝配的工做    經過一個 BeanPostProcessor 對 @Autowired 進行解析,因此要讓 @Autowired 起做用必須事先在 Spring 容器中聲明 AutowiredAnnotationBeanPostProcessor Bean。  

相關文章
相關標籤/搜索