Hibernate4註解零配置實現表映射

@Entity ,註冊在類頭上,將一個類聲明爲一個實體bean(即一個持久化POJO類) 。
@Table ,註冊在類頭上,註解聲明瞭該實體bean映射指定的表(table)。
@Id用來註冊主屬性,@GeneratedValue用來註冊主屬性的生成策略,@Column用來註冊屬性,@Version用來註冊樂觀鎖,@Transient用來註冊不是屬性。
以上的@Id、@GeneratedValue、 @Column 、 @Version,能夠用來註冊屬性,既能夠寫在Java類的屬性上,也能夠註冊在屬性對應的getter上。
@Transient註冊在多餘的屬性或多餘的getter上,可是必須與以上的@Column等對應。
@Column
標識屬性對應的字段,示例:@Column(name=「userName")

java代碼:
  1. @Column(  
  2.     name="columnName";                                (1)  
  3.     boolean unique() default false;                   (2)  
  4.     boolean nullable() default true;                  (3)  
  5.     boolean insertable() default true;                (4)  
  6.     boolean updatable() default true;                 (5)  
  7.     String columnDefinition() default "";             (6)  
  8.     String table() default "";                        (7)  
  9.     int length() default 255;                         (8)  
  10.     int precision() default 0// decimal precision   (9)  
  11.     int scale() default 0// decimal scale           (10)  
(1) name 可選,列名(默認值是屬性名)
(2) unique 可選,是否在該列上設置惟一約束(默認值false)
(3) nullable 可選,是否設置該列的值能夠爲空(默認值false)
(4) insertable 可選,該列是否做爲生成的insert語句中的一個列(默認值true)
(5) updatable 可選,該列是否做爲生成的update語句中的一個列(默認值true)
(6) columnDefinition 可選: 爲這個特定列覆蓋SQL DDL片斷 (這可能致使沒法在不一樣數據庫間移植)
(7) table 可選,定義對應的表(默認爲主表)
(8) length 可選,列長度(默認值255)
(8) precision 可選,列十進制精度(decimal precision)(默認值0)
(10) scale 可選,若是列十進制數值範圍(decimal scale)可用,在此設置(默認值0)
@Id,標識這個屬性是實體類的惟一識別的值。
注意:這個註解只能標註單一列構成的主鍵,如tbl_grade那種有兩個字段組成的聯合主鍵由其餘註解標識。
回憶*.hbm.xml:
<id name=  "uuid">
<generator class=  "assigned"/>
        </id>
@Id,只是標識這個屬性是主鍵,可是並無指出其生成策略,如上例中的assigned就是由程序員指定的生成策略。
若是僅僅寫出@Id,便是使用assigned生成略,如:

java代碼:
  1. @Id  
  2. @Column  
  3. private int uuid;  
  4. 若是想使用Oracle支持的sequence取主鍵,必須經過@GeneratedValue來指定生成策略,而由@SequenceGenerator指定如何使用sequence。  
  5. @Id  
  6. @Column  
  7. @GeneratedValue(  
  8. strategy = GenerationType.SEQUENCE,//使用sequence生成主鍵  
  9. generator =「generator「//引用下面名爲gernator的生成策略  
  10. )  
  11. @SequenceGenerator(  
  12. name = 「generator」,//定義名爲generator的生成策略  
  13. allocationSize = 1//每次sequence加1  
  14. name=「seq_a」//引用名爲seq_a的sequence  
  15. )  
  16. private int uuid;  
  17. @Version  
標識這個屬性用來映射樂觀鎖的version
@Transient
標識這個屬性不用持久化
@Embeddable【小對象的頭上】
標識實體中能夠定義一個嵌入式組件(embedded component)。組件類必須在類一級定義@Embeddable註解。
@Embedded【大對象的屬性頭上】
引用定義的小對象。
@Embeddable【小對象的頭上】
標識實體中能夠定義一個嵌入式組件(embedded component)。組件類必須在類一級定義@Embeddable註解。
注意:若是這個小對象做爲複合主鍵,必定要實現Serializable接口。這並非註解決定的,而是Hibernate的主鍵都須要實現Serializable接口。
@EmbeddedId 【大對象的屬性頭上】
引用定義的小對象做爲主鍵。
注意:不須要再使用@Id註解。
  
標準的1:1
    
XML的配置

java代碼:
  1. 1【tbl_product】:  
  2. <one-to-one name="info" cascade="all"/>  
  3. 1【tbl_product_info】:  
  4. <id name="uuid">  
  5. <generator class=「foreign【寫死,使用外來生成策略】">  
  6. <param name=「property」>product【引用本身的Java屬性名】 </param>  
  7. </generator>  
  8. </id>  
  9. <one-to-one name="product"/>  
註解的配置

java代碼:
  1. 1【tbl_product】:  
  2. @OneToOne(cascade=CascadeType.ALL)  
  3. @PrimaryKeyJoinColumn  
  4. private ProductInfoModel info;  
  5. 1【tbl_product_info】:  
  6. @Id  
  7. @Column  
  8. @GeneratedValue(generator=「copy【引用生成策略】")  
  9. @GenericGenerator(name=「copy【定義生成策略】」,strategy=「foreign【寫死,使用外來策略】」,parameters=@Parameter(name=「property」,value=「product【引用本身的Java屬性】"))  
  10. private int uuid;  
  11. @OneToOne(mappedBy=「info【引用對方的Java屬性】")  
  12. private ProductModel product;  
  13.    
標準的1:M
  
XML的配置


java代碼:
  1. 1【tbl_parent】:  
  2.  <set name="children">  
  3.         <key column=「puuid【對方的數據庫外鍵列名】"/>  
  4.         <one-to-many class=「cn.javass.model.c.ChildModel【對方的Java類名】"/>  
  5.   </set>  
  6. 多【tbl_child】:  
  7. <many-to-one name=「parent」 column=「puuid【本身的數據庫外鍵列名】"/>  
註解的配置


java代碼:
  1. 1【tbl_parent】:  
  2. @OneToMany  
  3. @JoinColumn(name="puuid【對方的數據庫外鍵列名】")  
  4. private Set<ChildModel> children = new HashSet<ChildModel>();  
  5. 多【tbl_child】:  
  6. @ManyToOne  
  7. @JoinColumn(name="puuid【本身的數據庫外鍵列名】")  
  8. private ParentModel parent;  
  9.    
標準的1:M

 
XML的配置

java代碼:
  1. <set name=「courses」 table=「tbl_grade【聯接表】">  
  2.         <key column=「suuid【聯接表裏表明本身的數據庫字段名】"/>  
  3.         <many-to-many column=「cuuid【聯接表裏表明對方的數據庫字段名】」 class=「cn.javass.model.e.CourseMode【對方的類名】l"/>  
  4. </set>  
  5. 註解的配置  
  6. @ManyToMany  
  7. @JoinTable(  
  8. name=「tbl_grade【聯接表】",  
  9. joinColumns=@JoinColumn(name="suuid【聯接表裏表明本身的數據庫字段名】"),  
  10. inverseJoinColumns=@JoinColumn(name="cuuid 【聯接表裏表明對方的數據庫字段名】」 )  
  11. )  
  12. private Set<CourseModel> courses = new HashSet<CourseModel>();  
  13.    
標準的1:M

    
XML的配置


java代碼:
  1. 1【tbl_product】:  
  2. <one-to-one name=「info」 foreign-key=「puuid【對方的數據庫外鍵列名】" cascade="all"/>  
  3. 1【tbl_product_info】:  
  4. <many-to-one name=「product」 column=「puuid【本身的數據庫外鍵列名】」 unique=「true【寫死】"/>  
註解的配置


java代碼:
  1. 1【tbl_product】:  
  2. @OneToOne(cascade=CascadeType.ALL,mappedBy=「product【對方的Java類屬性名 】")  
  3. private ProductInfoModel info;  
  4. 1【tbl_product_info】:  
  5. @OneToOne  
  6. @JoinColumn(name=「puuid【本身的數據庫外鍵列名】")  
  7. private ProductModel product;  
標準的1:M
 
  
 
 
XML的配置

java代碼:
  1. 1【tbl_parent】:  
  2. <set name=「children」 table=「tbl_parent_child【聯接表】">  
  3.         <key column=「puuid【聯接表裏表明本身的數據庫列名】"/>  
  4.         <many-to-many column=「cuuid【聯接表裏表明對方的數據庫列名】」 unique=「true【寫死】」  
  5. class=「cn.javass.model.d.ChildModel【對方的Java類名】"/>  
  6.         </set>  
  7. <join table=「tbl_parent_child【聯接表】">  
  8.         <key column="cuuid【聯接表裏表明本身的數據庫列名】"/>  
  9.         <many-to-one name="parent" column="puuid【聯接表裏表明對方的數據庫列名】" unique="true【寫死】"/>  
  10. </join>  
註解的配置

java代碼:
  1. 1【tbl_parent】:  
  2. @OneToMany(mappedBy="parent【對方的Java類屬性名 】")  
  3. private Set<ChildModel> children = new HashSet<ChildModel>();  
  4. 多【tbl_child】:  
  5. @ManyToOne  
  6. @JoinTable(  
  7. name=「tbl_parent_child【聯接表】",  
  8. joinColumns=@JoinColumn(name="cuuid【聯接表裏表明本身的數據庫字段名】"),  
  9. inverseJoinColumns=@JoinColumn(name="puuid【聯接表裏表明對方的數據庫字段名】")  
  10. )  
  11. private ParentModel parent;  
 
標準的1:M
 
  
 
 
XML的配置

java代碼:
  1. 1【tbl_product】:  
  2. <join table=「tbl_product_relation【聯接表】">  
  3.         <key column=「puuid【聯接表裏表明本身的列名】"/>  
  4.         <many-to-one name=「course【本身的Java屬性名】」 column=「cuuid【聯接表裏表明對方的列名】」 unique=「true【寫死】"/>  
  5.  </join>  
註解的配置

java代碼:
  1. 1【tbl_product】:  
  2. @ManyToOne  
  3. @JoinTable(  
  4. name=" tbl_product_relation 【聯接表】",  
  5. joinColumns=@JoinColumn(name="suuid【聯接表裏表明本身的列名】"),  
  6. inverseJoinColumns=@JoinColumn(name="cuuid【聯接表裏表明對方的列名】",unique=true【寫死】)  
  7. )  
  8. private CourseModel course;  
相關文章
相關標籤/搜索