【问题标题】:Hibernate Annotations - id is not set correctlyHibernate Annotations - id 设置不正确
【发布时间】:2010-10-19 12:26:38
【问题描述】:

我有一大堆用 JPA 注释的 Java bean:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class TitleEntry extends Entry {
    private Long id;

    public TitleEntry() { }

    public TitleEntry(String code, String label) {
        super(code, label);
    }

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

    protected void setId(Long id) {
        this.id = id;
    }
}

id 总是为每个对象生成这样的,并且似乎工作正常。

现在的问题: 当我在 Java 中保存一个对象时:

dao.save(titleEntry);

bean 的 id-property 设置为一个 int 值,它与实际 id 对应。 它对应于hibernate_sequence(我认为)。

问题:

  1. 为什么?
  2. 什么是 hibernate_sequence (在 Hibernate 网站上找不到合适的解释)?
  3. 我该如何解决?

注意:我使用的是 Java 1.6、MSSQL2005、Hibernate3

【问题讨论】:

    标签: java sql-server-2005 hibernate jpa


    【解决方案1】:

    为什么?

    我不知道,上一段关于一些“实际身份” 没有任何意义。你能澄清一下吗?显示TitleEntry 表的结构也可能会有所帮助。

    hibernate_sequence 到底是什么(在 Hibernate 网站上找不到合适的解释)?

    Hibernate 使用的序列或表的默认名称(请参阅5.1.5. Enhanced identifier generators)。鉴于 SQL Server 不支持序列,我敢打赌后者。您应该检查生成的 DDL 以准确了解已完成的操作(并显示相关部分)。

    但令我惊讶的是,Hibernate 没有默认为IDENTITY(您使用的是哪个版本的 Hibernate?)。

    我该如何解决?

    我不知道您要修复什么,但如果您想要完全控制,请不要使用AUTO 策略(IDENTITY 通常用于 SQL Server)。

    【讨论】:

      【解决方案2】:

      尝试使用对应的注解指定SequenceGenerator:

      @Id
      @GeneratedValue(strategy=GenerationType.SEQUENCE)
      @SequenceGenerator(name = "myGen", sequenceName = "MY_SEQUENCE")
      public Long getId() 
      {
          return id;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-10
        • 1970-01-01
        • 1970-01-01
        • 2013-04-10
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多