天天看點

【hibernate架構】各種問題用注解Annotation和mxl配置的解決

1.表名和類名不同,對表名進行配置

a)annotation:

一般說來,表名一定要和實體類的名稱一樣。

但如果表明和實體類名不一緻,可以用以下兩種方式指明實體類對應的表名:

1.annotation情況下:

運作測試類時自動建立了表(可不會自動建立資料庫哦)

自動建立表是由hibernate.cfg.xml中的這個配置語句決定的:

b)xml:

在實體類的配置檔案(如student.hbm.xml)中的class标簽裡寫 table="stu"指定表名:

2.字段名和屬性不同

a)字段名的get方法上的注解預設為@basic,不用寫。但是如果字段名和表裡屬性值不一樣的時候,需要用@column來解決,name指定插入到資料庫的屬性名(如果沒有,hibernate會自動建立)

b)xml中不用寫column(如果你非要配,就是這樣):

3.不需要psersistence的字段

a)annotation:@transient

在javabean中這樣寫

就不會對yourwifename進行持久化,也就不會在資料庫中建立這個屬性

b)xml不寫

4.映射日期與時間類型,指定時間精度

a)annotation:@temporal

在teacher的javabean中加入date字段生成屬性:

資料庫會生成一個datetime類型的屬性

在測試類中添加生日(為目前日期):

t.setbrithday(new date());

會在資料庫中看到存入的數值:

2014-12-03 15:05:31

那麼如果隻想要日期,或者隻想要時間,就需要對時間進行精确定位,方法為:

資料庫的相應屬性就會改成date類型,隻會存儲日期,不存時間

b)xml:指定type

5.映射枚舉類型

a)@enumerated

建立了一個枚舉類型,用來存放職稱的等級。

在javabean建立相應字段和屬性:

因為是特殊類型,hibernate無法向資料庫相應表中建構正确類型的屬性,是以要重新指定字段的類型:

指定為string:

指定為integer:

b)xml:非常麻煩

6.字段映射的位置(field或者get方法):

a)best practice:保持field和get set方法的一緻

字段映射的位置(如@id)可以放在field上面,也可以放在get方法上

例如放在get方法上:

放在field上:

一般工作的寫法,是放在field上,這樣看起來比較集中。但是,這種寫法實際上破壞了java的面向對象的封裝性。

原因是,字段一般說是private的。如果你在私有的上面寫了注解的話,就相當于hibernate直接去通路你私有的成員變量(用反射機制)。

從設計上來講,不推薦用放在field上的寫法,因為們把成員變量設成私有的就是不想讓外部類去直接拿我們的資料,這樣不合适。

轉載請注明出處:http://blog.csdn.net/acmman