1. 程式人生 > >添加註解後,框架沒有自動根據實體類生成資料表,Hibernate

添加註解後,框架沒有自動根據實體類生成資料表,Hibernate


  • @Id註解:指定實體Bean的主鍵對映,需在getter方法上標註。
  • @GeneratedValue註解:用於指定主鍵生成策略,註解支援的主鍵生成策略有:
    • AUTO——相當於配置檔案中的native,根據底層資料庫自動選擇使用IDENTITY、SEQUENCE、TABLE型別(預設值)
    • TABLE——使用table儲存id值
    • IDENTITY——自增註解,資料庫需要支援主鍵自動增長
    • SEQUENCE——使用序列生成
@Id和@GeneratedValue註解通常配合使用,例如:
  • 資料庫的自增主鍵

@Id @GeneratedValue(strategy= GenerationType.IDENTITY) public Long getId() { return id; }

  • 序列生成器

@Id @GeneratedValue(strategy= GenerationType.SEQUENCE, generator ="SEQ_STORE") public Long getId() { return id; }

然而經常也會有誤操作的情況出現(以下程式碼有誤):

@Id @GeneratedValue(strategy=GenerationType.AUTO) private String simpleId;

上述誤操作的狀態經常表現在,伺服器啟動時發現框架並沒有自動根據註解過的實體類,在資料庫中生成資料表,出錯的原因在於,“@GeneratedValue

”註解用於指定自增主鍵的生成策略,即主鍵是自增狀態時才可使用,然而現在的主鍵定義為“String”型別,無法形同數值型別自動累加,故而資料表沒有自動建立。

然而這類錯誤通常並不會反映任何的出錯提示,因此較難發現。

關於Hibernate註解的標註位置

Hibernate有兩種對映欄位的方式分別為:Filed和Property。

對應這兩種方式Hibernate分別會通過屬性(Java反射)或getter方法對映欄位。在使用註解的時候,@Id註解的位置決定了Hibernate的對映方式。

當@Id註解標註在屬性欄位上時,Hibernate會採用屬性對映方式,此時其他註解也必須標註在屬性上,否則程式會出錯;@Id註解標註在getId()方法上時,也是一樣的,總之所有註解的位置要保持和@Id註解位置一致。