Java 强制休眠使id为空

Java 强制休眠使id为空,java,hibernate,postgresql,jpa,Java,Hibernate,Postgresql,Jpa,所以我使用Postgres和Hibernate4.2.2以及类似的实体 @Entity(name = "Users") @Check(constraints = "email ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$'") @DynamicInsert public class Users { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nam

所以我使用Postgres和Hibernate4.2.2以及类似的实体

@Entity(name = "Users")
@Check(constraints = "email ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$'")
@DynamicInsert
public class Users {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "id_user",unique = true)
  @Index(name = "user_pk")
  private Integer idUser;
Hibernate仍然会插入表中已经存在的一些id,而不是将其留给数据库来填充。此外,hibernate强制基于缓存的id,甚至不检查数据库是否具有最新的id

我如何强制它,以便我可以将id保留为空,并让数据库插入它

首先,我认为这是因为我使用的是
int
,默认情况下
int
是0,但即使使用对象,它也只是从缓存中强制id


因此,我的目标是让数据库填充id而不是hibernate,或者至少在填充之前先休眠以首先检查数据库的id。

因此,我得到的错误是由以下原因引起的:org.postgresql.util.PSQLException:错误:重复键值违反唯一约束“users\u pkey”详细信息:key(id\u user)=(1)已存在。
这不是由Hibernate和缓存引起的,而是由在创建数据库时导入数据引起的,在创建数据库时,我使用给定的id插入了数据,例如:
插入到用户(id\u用户、电子邮件、密码、标签)值(1,'a@b.c'、'***'、'Adpleydu')

生成的顺序没有更新,所以如果我通过控制台插入纯SQL,我会得到相同的错误。

播种数据就是问题所在。然而,你仍然可以使用纯sequal种子,并让序列“跟上”

1) 确保您的主键为串行类型

CREATE TABLE table_name(
    id SERIAL
);
2) 添加此“setval”行以确保序列已更新

select setval('table_name_id_seq',COALESCE((select max(id) + 1 from table_name), 1));
参考:

向我们展示您用于插入实体的代码OK,这里的错误是,当插入Postgres而不使用序列时(在数据库创建时更新数据),序列保持不变而不增加,这就是错误Post它作为您问题的答案您需要重设序列