我有一大堆 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 (我认为)。
问题:
- 为什么?
- 到底什么是 hibernate_sequence(在 Hibernate 网站上找不到合适的解释)?
- 我该如何修复它?
注意:我使用的是 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/