2011-11-16 17 views
4

我使用如何防止Hibernate使用0作爲ID?

@TableGenerator(name="tab",initialValue=2,allocationSize=50) 

上的實體,並定義與ID

@Id 
@GeneratedValue(generator="tab",strategy=GenerationType.TABLE) 
private int id; 

但仍然休眠使用0作爲一個ID。

我不能使用@GenericGenerator,因爲註釋不會隨Jboss AS7附帶的Hibernate4一起提供。

有沒有簡單的解決方案,還是我必須編寫自定義生成器?

+1

難道你沒有任何覆蓋你的註釋的部署描述符代碼嗎?您是使用模式初始化還是使用現有的數據庫? –

+0

沒有數據庫特定的部署描述符。我現在正在使用並通過import.sql使用一些示例數據。 –

+0

您確定在這些數據中沒有任何表生成器駐留的表的插入?你是否嘗試調用空數據庫上的代碼讓Hibernate生成所有表,並在執行import.sql之前? –

回答

2

由於您有一個原始類型,Hibernate正在創建ID爲0的ID。嘗試使用Integer id而不是int id。記住基元不能包含空值。

如果要生成自定義ID生成器,可以使用DB中的SEQUENCE生成對象的ID。

<id ....> 
     <generator class="sequence"> 
      <param name="sequence">YOUR_SEQUENCE _NAME</param> 
     </generator> 
</id> 

閱讀關於發生器類別的API here

+0

謝謝。這個問題或多或少是因爲它需要一個自定義生成器來告訴Hibernate不要使用0作爲ID,以及爲什麼它忽略了生成器註釋。 –