@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代碼:
- @Column(
- name="columnName"; (1)
- boolean unique() default false; (2)
- boolean nullable() default true; (3)
- boolean insertable() default true; (4)
- boolean updatable() default true; (5)
- String columnDefinition() default ""; (6)
- String table() default ""; (7)
- int length() default 255; (8)
- int precision() default 0; // decimal precision (9)
- 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代碼:
- @Id
- @Column
- private int uuid;
- 若是想使用Oracle支持的sequence取主鍵,必須經過@GeneratedValue來指定生成策略,而由@SequenceGenerator指定如何使用sequence。
- @Id
- @Column
- @GeneratedValue(
- strategy = GenerationType.SEQUENCE,//使用sequence生成主鍵
- generator =「generator「//引用下面名爲gernator的生成策略
- )
- @SequenceGenerator(
- name = 「generator」,//定義名爲generator的生成策略
- allocationSize = 1,//每次sequence加1
- name=「seq_a」//引用名爲seq_a的sequence
- )
- private int uuid;
- @Version
標識這個屬性用來映射樂觀鎖的version
@Transient
標識這個屬性不用持久化
@Embeddable【小對象的頭上】
標識實體中能夠定義一個嵌入式組件(embedded component)。組件類必須在類一級定義@Embeddable註解。
@Embedded【大對象的屬性頭上】
引用定義的小對象。
@Embeddable【小對象的頭上】
標識實體中能夠定義一個嵌入式組件(embedded component)。組件類必須在類一級定義@Embeddable註解。
注意:若是這個小對象做爲複合主鍵,必定要實現Serializable接口。這並非註解決定的,而是Hibernate的主鍵都須要實現Serializable接口。
@EmbeddedId 【大對象的屬性頭上】
引用定義的小對象做爲主鍵。
注意:不須要再使用@Id註解。
標準的1:1
XML的配置
java代碼:
- 主1【tbl_product】:
- <one-to-one name="info" cascade="all"/>
- 從1【tbl_product_info】:
- <id name="uuid">
- <generator class=「foreign【寫死,使用外來生成策略】">
- <param name=「property」>product【引用本身的Java屬性名】 </param>
- </generator>
- </id>
- <one-to-one name="product"/>
註解的配置
java代碼:
- 主1【tbl_product】:
- @OneToOne(cascade=CascadeType.ALL)
- @PrimaryKeyJoinColumn
- private ProductInfoModel info;
- 從1【tbl_product_info】:
- @Id
- @Column
- @GeneratedValue(generator=「copy【引用生成策略】")
- @GenericGenerator(name=「copy【定義生成策略】」,strategy=「foreign【寫死,使用外來策略】」,parameters=@Parameter(name=「property」,value=「product【引用本身的Java屬性】"))
- private int uuid;
- @OneToOne(mappedBy=「info【引用對方的Java屬性】")
- private ProductModel product;
-
標準的1:M
XML的配置
java代碼:
- 1【tbl_parent】:
- <set name="children">
- <key column=「puuid【對方的數據庫外鍵列名】"/>
- <one-to-many class=「cn.javass.model.c.ChildModel【對方的Java類名】"/>
- </set>
- 多【tbl_child】:
- <many-to-one name=「parent」 column=「puuid【本身的數據庫外鍵列名】"/>
註解的配置
java代碼:
- 1【tbl_parent】:
- @OneToMany
- @JoinColumn(name="puuid【對方的數據庫外鍵列名】")
- private Set<ChildModel> children = new HashSet<ChildModel>();
- 多【tbl_child】:
- @ManyToOne
- @JoinColumn(name="puuid【本身的數據庫外鍵列名】")
- private ParentModel parent;
-
標準的1:M
XML的配置
java代碼:
- <set name=「courses」 table=「tbl_grade【聯接表】">
- <key column=「suuid【聯接表裏表明本身的數據庫字段名】"/>
- <many-to-many column=「cuuid【聯接表裏表明對方的數據庫字段名】」 class=「cn.javass.model.e.CourseMode【對方的類名】l"/>
- </set>
- 註解的配置
- @ManyToMany
- @JoinTable(
- name=「tbl_grade【聯接表】",
- joinColumns=@JoinColumn(name="suuid【聯接表裏表明本身的數據庫字段名】"),
- inverseJoinColumns=@JoinColumn(name="cuuid 【聯接表裏表明對方的數據庫字段名】」 )
- )
- private Set<CourseModel> courses = new HashSet<CourseModel>();
-
標準的1:M
XML的配置
java代碼:
- 主1【tbl_product】:
- <one-to-one name=「info」 foreign-key=「puuid【對方的數據庫外鍵列名】" cascade="all"/>
- 從1【tbl_product_info】:
- <many-to-one name=「product」 column=「puuid【本身的數據庫外鍵列名】」 unique=「true【寫死】"/>
註解的配置
java代碼:
- 主1【tbl_product】:
- @OneToOne(cascade=CascadeType.ALL,mappedBy=「product【對方的Java類屬性名 】")
- private ProductInfoModel info;
- 從1【tbl_product_info】:
- @OneToOne
- @JoinColumn(name=「puuid【本身的數據庫外鍵列名】")
- private ProductModel product;
標準的1:M
XML的配置
java代碼:
- 1【tbl_parent】:
- <set name=「children」 table=「tbl_parent_child【聯接表】">
- <key column=「puuid【聯接表裏表明本身的數據庫列名】"/>
- <many-to-many column=「cuuid【聯接表裏表明對方的數據庫列名】」 unique=「true【寫死】」
- class=「cn.javass.model.d.ChildModel【對方的Java類名】"/>
- </set>
- <join table=「tbl_parent_child【聯接表】">
- <key column="cuuid【聯接表裏表明本身的數據庫列名】"/>
- <many-to-one name="parent" column="puuid【聯接表裏表明對方的數據庫列名】" unique="true【寫死】"/>
- </join>
註解的配置
java代碼:
- 1【tbl_parent】:
- @OneToMany(mappedBy="parent【對方的Java類屬性名 】")
- private Set<ChildModel> children = new HashSet<ChildModel>();
- 多【tbl_child】:
- @ManyToOne
- @JoinTable(
- name=「tbl_parent_child【聯接表】",
- joinColumns=@JoinColumn(name="cuuid【聯接表裏表明本身的數據庫字段名】"),
- inverseJoinColumns=@JoinColumn(name="puuid【聯接表裏表明對方的數據庫字段名】")
- )
- private ParentModel parent;
標準的1:M
XML的配置
java代碼:
- 1【tbl_product】:
- <join table=「tbl_product_relation【聯接表】">
- <key column=「puuid【聯接表裏表明本身的列名】"/>
- <many-to-one name=「course【本身的Java屬性名】」 column=「cuuid【聯接表裏表明對方的列名】」 unique=「true【寫死】"/>
- </join>
註解的配置
java代碼:
- 1【tbl_product】:
- @ManyToOne
- @JoinTable(
- name=" tbl_product_relation 【聯接表】",
- joinColumns=@JoinColumn(name="suuid【聯接表裏表明本身的列名】"),
- inverseJoinColumns=@JoinColumn(name="cuuid【聯接表裏表明對方的列名】",unique=true【寫死】)
- )
- private CourseModel course;