2009-11-26 30 views
4

设置我的实体属性hibernate @GeneratedValue是否正确?

@GeneratedValue 
Long id; 

,我能够生成用于在数据库中的实体ID。我的问题是为什么所有的实体共享相同的增量数? 是不是每个表都应该从零开始计数?

回答

7

这取决于基础数据库。 GenerationType默认为AUTO,和Hibernate选择取决于数据库的三个变种之一。如果你想使用一个特别的,将其设置为属性@GeneratedValue

+0

我已经设置@GeneratedValue,所以现在所有的实体共享相同的序列。我想每个实体都有它自己的序列 – cometta 2009-11-27 05:12:30

+1

尝试GenerationType.TABLE – Bozho 2009-11-27 05:49:00

+0

我得到错误:无法获取或更新下一个值;嵌套的例外是org.hibernate.exception.SQLGrammerException:无法获取或更新下一个值 – cometta 2009-11-30 02:31:24

2

这是依赖于数据库。 JPA实现根据使用的数据库系统使用不同的ID生成器。例如,使用Oracle,将创建一个单一序列,并且该序列将用于为所有实体类型生成ID。默认情况下,它不会为每个实体创建序列,因为通常没有理由。同样的逻辑适用于使用序列而不是自动增加列的其他数据库系统。

我不是100%肯定,如果JPA的API可以让你改变这种行为,但我知道,Hibernate的注释做。但是,您还没有告诉我们您正在使用哪个数据库,或者您正在使用哪个JPA实现,因此我无法给您更多的建议。

+0

我使用oracle数据库和使用spring-hibenateTemplate – cometta 2009-11-27 05:11:18