我有一大堆使用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-value, not 与实际id相对应。 它对应于hibernate_sequence(我认为)。
问题:
注意:我使用的是Java 1.6,MSSQL2005,Hibernate3
答案 0 :(得分:1)
尝试使用相应的注释指定SequenceGenerator:
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
@SequenceGenerator(name = "myGen", sequenceName = "MY_SEQUENCE")
public Long getId()
{
return id;
}
答案 1 :(得分:1)
为什么?
我不知道,关于某些“实际身份证”的前一段没有任何意义。你能澄清一下吗?显示TitleEntry
表的结构也可能会有所帮助。
究竟是什么
hibernate_sequence
(在Hibernate网站上找不到合适的解释)?
Hibernate使用的序列或表的默认名称(请参阅5.1.5. Enhanced identifier generators)。鉴于SQL Server不支持序列,我打赌后者。您应该检查生成的DDL以查找已完成的操作(并显示相关部分)。
但是我很惊讶Hibernate没有默认为IDENTITY
(你正在使用什么版本的Hibernate?)。
我该如何解决?
我不知道您想要修复什么,但如果您想要完全控制,请不要使用AUTO
策略(SQL Server通常使用IDENTITY
)。