手动更新用于在Hibernate中生成主键的计数器?

在我的spring项目中,数据库中的表是由Hibernate使用我的实体类作为基础自动创建的,但我手动在表中插入一些默认值(使用pgAdmin3)。

因为那,我现在面临这个问题:当我尝试通过Java代码在已经有值的一个表中插入一个值时,我收到一条错误消息,说主键已经存在于数据库中。

谁知道如何解决这个问题?

UPDATE

这就是我在课堂上声明主键的方式:

@Id @Column(name = "id") @GeneratedValue(strategy=GenerationType.AUTO) private int id; 

每个表调用一次SQL查询,将序列设置为下一个空闲数:

 SELECT setval('tblname_id_seq', max(id)) FROM tblname; 

tblname是表的实际名称。

Hibernate可能使用不同的命名约定,或者序列可能已重命名。 如果找不到serial列后面的serial ,请查看( 每个文档 ):

 SELECT pg_get_serial_sequence(tblname, column_name) 

更多细节:
修改Django AutoField的起始值
如何将CSV导入已经分配了ID的postgresql?

这里的问题可能是您将id声明为原语而不是包装器。

所以代替:

 private int id; 

你应该有:

 private Integer id; 

当您创建id初始化为0的实体时,而不是NULL。

这就是为什么你会得到重复的id约束违例exception。

只有当id为NULL时,AUTO生成策略才会将id赋值委托给数据库。