1. 程式人生 > >Hibernate註解對映欄位的位置到底應該放在屬性還是方法上

Hibernate註解對映欄位的位置到底應該放在屬性還是方法上

現在我們對於專案中大量使用@Entity註冊在類頭上,將一個類宣告為一個實體bean(即一個持久化POJO類) ,@Table註冊在類頭上,註解聲明瞭該實體bean對映指定的表,來體現實體與表的這種對映關係。

對於屬性欄位和表的欄位關係對應的註解屬性的位置,一般我們採用以下兩種方式:

第一種:

是把註解@Column(name ="xx")放在field上,一種是把註解放在get方法上一般放在field上看起來比較集中、清晰;

第二種:

是把註解@Column(name= "xx")放在get方法上,這種方式看起來比較散漫、不很清楚;

但是第一種方式這樣做實際上破壞了java面向物件的封裝性,原因是一般我們寫javaBean,成員變數通常定義為private,目的就是不讓別人來直接訪問的私有屬性,而我們把註解放在私有成員的變數上,就是預設hibernate可以直接訪問我們的私有的成員變數,所以我們定義屬性為private,就實際沒有多大意義,至於hibernate為什麼能訪問,hibernate採用java的反射機制完全可以訪問私有成員變數!所以應該放在get方法上,第二種方式這個時候就顯得更加合理。

Hibernate自動幫我們建表:

如果我們採用註解的方式在我們的實體Bean上,又想通過掃描這些註解的Bean,通過Hibernate自動幫我們建表,那麼你就會發現欄位註解的位置不同甚至會影響到建表的結構,尤其是大欄位、外來鍵約束的生成效果。

如果採用第一種方式註解到私有欄位上,這種幫我們建立表結構、約束條件和大欄位Lob型別這些都是非常正常的,而通過第二種方式註解到get方法上,這種幫我們的建立的表大部分正常欄位正常,而外來鍵關聯的和大欄位就會出現問題.

雖然專案的開發我們不採用hibernate幫我們自動建表,通常我們還是要手動的建表,所以這一些是對於通過Hibernate幫我們自動建表要考慮的!而實際開發中,已註解在get方法上為多數!