Hibernate 用新行替换现有行会导致重复键异常

Hibernate 用新行替换现有行会导致重复键异常,hibernate,postgresql,jpa,Hibernate,Postgresql,Jpa,各位。 用新行替换表中的现有行时出现问题。我使用JPA和PostgreSQL数据库。我正在尝试删除所有现有行,然后创建新行,但收到异常: org.postgresql.util.PSQLException:错误:重复的键值违反唯一约束“user\u destination\u pk”。所有这些操作都在单个JTA事务中。似乎JPA在插入之前不会删除行,但我没有收到删除异常。。。非常感谢您的帮助。在保存/添加新实体之前,请使用HibernateSession.flush()方法刷新(执行SQL)删除

各位。 用新行替换表中的现有行时出现问题。我使用JPA和PostgreSQL数据库。我正在尝试删除所有现有行,然后创建新行,但收到异常:
org.postgresql.util.PSQLException:错误:重复的键值违反唯一约束“user\u destination\u pk”。所有这些操作都在单个JTA事务中。似乎JPA在插入之前不会删除行,但我没有收到删除异常。。。非常感谢您的帮助。

在保存/添加新实体之前,请使用Hibernate
Session.flush()
方法刷新(执行SQL)删除操作。

您可以创建唯一的约束,作为
可延迟的初始延迟

我最初也想到了这一点,但我认为在这里没有帮助。从描述来看,实际上是JPA在发送插入之前没有发送删除。唯一有帮助的情况是JPA在发送插入后发送删除。@a_horse_和_no_名称在同一个JTA事务中并不重要。谢谢,我考虑过flush(),但我想它完成了DB事务。我说得对吗?我不想删除,因为我不确定新行是否正确。调用flush()不会完成事务(尽管提交事务会隐式地刷新()),它只会使Hibernate执行SQL以使数据库进入与会话相同的状态。我想知道我们必须调用flush()什么但在删除之后和插入之前显式执行?@Glide,因为Hibernate不保证SQL语句的执行顺序与从会话中删除/添加对象的顺序相同。如果对象由集合管理,则会发生这种情况。通过执行
flush()
调用,在添加新实体之前将删除内容推送到数据库中。@araqnid每个hibernate语句之后的约定flush()也是这样吗?何时需要调用flush()?