java - Hibernate Annotations - id 设置不正确

标签 java sql-server-2005 hibernate jpa

我有一大堆 Java bean,用 JPA 像这样注释:

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 属性设置为 int 值,该值与实际 id 相对应。 它对应于 hibernate_sequence (我认为)。

问题:

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

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

最佳答案

Why?

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

What is hibernate_sequence anyway (can't find a decent explanation on Hibernate website)?

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

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

How can I fix it?

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

关于java - Hibernate Annotations - id 设置不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3968277/

相关文章:

sql-server - 检查空 varbinary(max) 列的效率?

java - Hibernate Envers - 获取已更改的字段

java - 如何将 jlist 中的项目复制到另一个项目?

java - JSONObject 创建抛出空指针异常

c# - 从字符串转换日期时间时转换失败

sql-server - 在 SQL Server 2005 中捕获错误 266

java - Hibernate:org.hibernate.WrongClassException、SINGLE_TABLE 继承和 DiscriminatorFormula

java - 查询用户输入,然后存储在数据库中,然后显示在页面上

java - Arquillian 测试未执行

java - Android 提示从 gridview 保存图像或设置壁纸