Java hibernate@GeneratedValue正确吗?

Java hibernate@GeneratedValue正确吗?,java,hibernate,entity,Java,Hibernate,Entity,我设置了我的实体属性 @GeneratedValue Long id; 我能够为数据库中的实体生成id。我的问题是为什么所有实体共享相同的增量数量不是每个表都应该从零开始计数吗?这取决于数据库。JPA实现根据所使用的数据库系统使用不同的ID生成器。例如,对于Oracle,将创建一个序列,该序列将用于为所有实体类型生成ID。默认情况下,它不会为每个实体创建序列,因为通常没有理由这样做。同样的逻辑也适用于使用序列而不是自动递增列的其他数据库系统 我不能100%确定JPAAPI是否允许您更改这种行为

我设置了我的实体属性

@GeneratedValue
Long id;

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

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


我不能100%确定JPAAPI是否允许您更改这种行为,但我知道Hibernate注释可以。但是,您还没有告诉我们您正在使用哪个数据库,或者您正在使用哪个JPA实现,因此我不能给您更多的建议。

这取决于基础数据库。
默认情况下是自动的,Hibernate根据数据库选择三种变体之一。如果您想特别使用一个,请将其设置为
@GeneratedValue

的属性。我正在使用oracle db和spring HibenateTemplate。我已经设置了@GeneratedValue,因此所有实体现在共享相同的序列。我希望每个实体都有自己的sequencei get错误:无法获取或更新下一个值;嵌套异常为org.hibernate.exception.SQLGrammerException:无法获取或更新下一个值问题已解决,我添加了更新行