2013-05-11 55 views
0

我正在使用JPA2.0和休眠4休眠生成使用觸發器主鍵

爲了生成表中的主鍵,我使用表觸發器。如果我是 ,使用Long作爲主鍵的數據類型,則觸發器正常工作。但是,如果我使用字符串作爲主鍵 數據類型,那麼我收到以下錯誤。

org.springframework.orm.hibernate3.HibernateSystemException: Unknown integral 
data type for ids : java.lang.String; nested exception is 
org.hibernate.id.IdentifierGenerationException: Unknown integral 
data type for ids : java.lang.String at 
org.springframework.orm.hibernate3.SessionFactoryUtils. 
convertHibernateAccessException(SessionFactoryUtils.java:690) 

那麼是不是允許使用字符串爲主鍵生成使用觸發器的值?

我的代碼片段使用觸發

private String deptNo; 
@Id 
@GenericGenerator(name = "trig", strategy = "increment") 
@GeneratedValue(generator = "trig") 
@Column(name = "DEPT_NO") 

    public String getDeptNo() { 
    return deptNo; 
} 

public void setDeptNo(String deptNo) { 
    this.deptNo = deptNo; 
} 

回答

2

你不能在休眠使用產生的值的字符串,但是沒有鑰匙沒有限制生成的值。如果必須使用deptNo作爲字符串,則可以爲Domain對象創建一個包含deptNo as Long的適配器類。

+0

dursun通過使用String作爲適配器類,究竟是什麼意思?你的意思是創建自定義類來生成密鑰? – user75ponic 2013-05-11 09:59:22

+0

不,我的意思是爲當前類創建另一個對象,例如,如果您的當前類是Employee,則可以創建AdaptorEmployee,將Employees的deptNo屬性轉換爲一個字符串。 – dursun 2013-05-11 10:13:50

+0

所以當我寫數據庫時,我應該調用AdaptorEmployee類? – user75ponic 2013-05-11 10:35:16