【问题标题】:Hibernate Generate Primary Key Using TriggerHibernate 使用触发器生成主键
【发布时间】:2013-05-11 09:02:37
【问题描述】:

我正在使用 JPA2.0 和 Hibernate 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)

那么是不是不允许使用String作为主键来使用触发器生成值?

我的代码 sn-p 用于使用触发器生成值

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

【问题讨论】:

    标签: hibernate jpa jpa-2.0


    【解决方案1】:

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

    【讨论】:

    • dursun 使用 String 作为适配器类到底是什么意思?您的意思是创建自定义类来生成密钥?
    • 不,我的意思是您为当前类创建另一个对象,例如,如果您当前类是 Employee,您可以创建 AdaptorEmployee,它将长的Employees deptNo 属性转换为字符串。
    • 所以当我写入数据库时​​我应该调用 AdaptorEmployee 类?
    • 您应该在需要 deptNo 作为字符串时使用适配器,并且只要您需要 deptNo 就应该使用实际类。所以当你被 db 吸引时,你需要 deptNo 的时间。
    猜你喜欢
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多