根据我的理解,如果我们有@SequenceGenerator
注释和序列名称,hibernate将通过调用nextval()
获取id的下一个值,然后在插入新条目时使用该id。
另一种方法是在数据库中将列标记为自动增量,然后Hibernate将不必执行此操作。例如,使用Postgres,在CREATE TABLE
查询
id INTEGER PRIMARY KEY DEFAULT nextval('my_id_seq')
每种方法的优点/缺点是什么?当一种方法优先于另一种方法时是否存在特定情况?
答案 0 :(得分:1)
@SequenceGenerator
:
allocationSize
功能,可以提高性能 Auto increment
通常在生产环境中,人们推荐使用表格生成器作为最便携/可监控的解决方案......但它总是取决于
答案 1 :(得分:0)
ObjectDB为每个数据库维护一个特殊的全局数字生成器。
此数字生成器用于为没有定义主键字段的实体对象生成自动对象ID,并且相同的数字生成器也用于为使用AUTO策略的 @GeneratedValue注释的主键字段生成数值:
@Id @GeneratedValue(strategy=GenerationType.AUTO) long id;
只要您使用自动策略,每个COMMITED到数据库的对象都将从同一个池中接收下一个递增的ID。
我的来源和更深入的artcile HERE
答案 2 :(得分:0)
如果您的列在数据库中有自动增量,则在持久实体类中使用@GeneratedValue
注释该列,这有助于在保存到数据库时自动增加
@Entity
@Table(name="s3_dominant_person")
public class S3_Dominant_Person {
@Id
@GeneratedValue
private Integer id;
您必须在数据库表
中AUTO_INCREMENT
该列
's3_dominant_person', 'CREATE TABLE `s3_dominant_person` ( `id` int(11)
NOT NULL AUTO_INCREMENT,