java - 强制 hibernate 将 id 留空

标签 java hibernate postgresql jpa

所以我正在使用 Postgres 和 Hibernate 4.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 但即使在使用 object 时它也只是强制从其缓存中获取 id。

所以我的目标是让数据库填充 id 而不是 hibernate 或至少是 Hibernate 在填充之前首先检查数据库的 id。

最佳答案

所以我得到的错误是
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "users_pkey"Detail: Key (id_user)=(1) already存在。
这不是由 Hibernate 和缓存引起的,而是由创建数据库时导入数据引起的,我在其中插入了给定的 ID,例如:
INSERT INTO users(id_user,email,password,tag) VALUES (1 ,'a@b.c','***','Adpleydu');
并且生成的顺序没有更新,所以如果我通过控制台插入纯 SQL,我会得到同样的错误。

关于java - 强制 hibernate 将 id 留空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37501995/

相关文章:

JAVA : HOW TO Join same table in hibernate and select column's value

java - OpenShift 上的 MySQL UTF-8 编码问题

ruby-on-rails - Ruby 和 PostgreSQL 单行模式

sql - 如何按日期顺序计算日期之间的平均天数

linux - 将 AWK 结果分配给变量

java - JSF/Primefaces - 命令按钮 : open new browser tab without ViewScoped bean getting killed

java - 项目调度基本示例: chromosome for the Genetic Algorithm

java - 将数组转换为更小的数组

java - 关于 Servlet 的问题

java - 无法实例化 RegionFactory