当前位置: 首页 > 知识库问答 >
问题:

错误:重复键值违反唯一约束错误JPA spring boot

孙项禹
2023-03-14

我有两个表通知和消息。

Message.java

...
...
@Table(name = "message",
       
 uniqueConstraints = {@UniqueConstraint(name = "UniqueMessage",
 columnNames = { "message_id" })})

public class Message implements Serializable {

@Id

@Column(name = “message_id")
private int messageId;

@Column(name = "description")
private String description;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "start_time")
private Date startTime;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "end_time")
private Date endTime;

@PrePersist
@PreUpdate
public void generateMessageId(){
    this.messageId = Math.abs(Objects.hash(this.getDescription(),
            this.getStartTime().getTime() / 1000));
}

我的用例是——我将创建一条具有特定描述和开始时间的消息。如果我再次收到相同的消息,我应该能够更新结束时间。MessageId在方法generateMessageId下单独计算,因为这将作为一个标识符来查找消息是否已经保存。如果是,我将更新消息。它对第一条消息很有效,但当我尝试用更新的endTime再次保存时,我得到了

错误:重复的键值违反了唯一约束“message\u pkey”

步骤:我尝试过:

Message m1 = new Message();
m1.setDescription(“fake”);
m1.setStartTime(“2022-01-03T12:05:00”)

messageRepository.save(m1);

This works well. I can see a row in database with

Message_id      description     start_time      end_time
46536723        fake            2022-01-03T12:05:00     null


Message m2 = new Message();
m2.setDescription(“fake”);
m2.setStartTime(“2022-01-03T12:05:00”);
m2.setEndTime(“2022-01-05T12:00:00)

messageRepository.save(m2);

我得到错误:重复的键值违反了唯一的约束错误。jpa不是应该找到现有的id并对行进行更新而不是插入吗?

请建议此方法是否看起来像一种解决方法。

共有1个答案

汝昀
2023-03-14

您正在尝试更新消息endTime,第一次,它可以工作,因为当您尝试更新时,现在没有该消息的条目,但您没有设置id。默认情况下,id为零,如果id为零,它将尝试保存消息,而不是更新。

要解决此问题,您可以检查(通过逐条消息查找消息,因为消息是唯一的)是否存在该消息,然后更新endTime。

 类似资料:
  • 我有这样的桌子: 我试图插入一些查询到另一个表(device_usage_test1)。这是我的表: 这是我的插入命令: 稍后,我将在device_usage_test1上创建一个插入查询。所以我的设备序列必须是唯一的。但是当我尝试用deviceserial (unique)插入时。它显示错误:< code >错误:重复的键值违反了唯一约束“device _ usage _ device seri

  • 我有一个模型,每次创建一个Post时,我都希望同时创建一个的新实例。 所以在邮政。rb我在保存后使用回调,然后编写一个私有方法: 但当创建提案时,我会遇到以下错误: PG::唯一违反:错误:重复的键值违反唯一约束"moderations_reportable"详细信息:键(reportable_type,reportable_id)=(Post,25)已经存在。:插入到"适度"("blog_id"

  • 在我从事的一个项目中,这个问题发生过几次,尽管我使用了我在这个网站上找到的“python manage . py sqlsequencereset”修复程序,它工作了一段时间,然后又开始抛出错误。 我一直得到的错误非常简单: 在我看来,我有: 我现在已经做了几次sqlequence重置,然后错误在几周后返回。我没有导入任何数据,但我的同事正在现场使用他们的手机创建新对象,一次一个。 运行sqlse

  • 我在创建应用程序时遇到了这个问题。因此,每当我添加第一条评论时,问题都不会出现,但当我第二次尝试时,我会收到此错误: 重复的键值违反了唯一约束“tripplanner_discussion_author_id_key”详细信息:键 (author_id)=(1) 已存在。 我试图把放到 models.py,但它根本没有帮助。 models.py views.py 更新 当我登录到另一个用户时,一个

  • 我正在我的Laravel应用程序中使用psql。我正在尝试创建我的用户,并且不断出现此错误 唯一冲突:7错误:重复键值违反唯一约束“users\u pkey” 我做了我想做的事吗? 当我用钩住我的应用程序时,我现在所拥有的一切都会起作用。 任何提示/建议将对我意义重大。

  • 我在postgresql中是新的,当我测试我的代码以插入时,我收到以下错误消息 错误异常('error','23505',重复的键值违反了唯一约束“foo_column_key”); 我曾尝试在cursor.execute()代码后使用connection.commit()或connection.rollback()。 问题: 如何在不重新创建类似于表的命令“select setval('foo_