Hibernate使用触发器生成主键

时间:2013-05-11 09:02:38

标签: hibernate jpa jpa-2.0

我正在使用JPA2.0和Hibernate 4

为了在表中生成主键,我使用表触发器。如果我是,触发器工作正常 使用Long作为主键的数据类型。但是,如果我使用String作为主键 数据类型,然后我收到以下错误。

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)

所以不允许使用String for Primary Key来使用trigger生成值吗?

我的代码段,用于使用触发器生成值

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;
}

1 个答案:

答案 0 :(得分:2)

你不允许在休眠中使用String的生成值,但是对key没有限制。如果你必须使用deptNo作为字符串,你可以为你的Domain对象创建一个适配器类,其中包含deptNo为Long。