Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重复输入';[十] &x27;对于键';[Y] &x27;关于JPA存储库';保存';活动已保存的实体已定义其键_Java_Hibernate_Jpa_Repository - Fatal编程技术网

Java 重复输入';[十] &x27;对于键';[Y] &x27;关于JPA存储库';保存';活动已保存的实体已定义其键

Java 重复输入';[十] &x27;对于键';[Y] &x27;关于JPA存储库';保存';活动已保存的实体已定义其键,java,hibernate,jpa,repository,Java,Hibernate,Jpa,Repository,据我所知,JPA存储库中的“save”函数应该会在具有提供的键的行已经存在时自动执行更新。但是,我遇到了一些错误,使它看起来像是在尝试执行盲insert操作,而不是更新。我在这里有点不知所措 我的实体如下所示: @Entity @Data @Table(name = "inquiry_record") @NoArgsConstructor public class InquiryRecordEntity { @Id @Column(name = "inquiry_id")

据我所知,JPA存储库中的“save”函数应该会在具有提供的键的行已经存在时自动执行更新。但是,我遇到了一些错误,使它看起来像是在尝试执行盲
insert
操作,而不是更新。我在这里有点不知所措

我的实体如下所示:

@Entity
@Data
@Table(name = "inquiry_record")
@NoArgsConstructor
public class InquiryRecordEntity {

    @Id
    @Column(name = "inquiry_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer inquiryId;

    //Lots more fields down below, not important, no other keyed columns
}
我有一个简单的存储库:

@Repository
public interface InquiryRecordRepository extends CrudRepository<InquiryRecordEntity, Integer> {
}
但如果我希望它只是覆盖上一个值,它会抛出一个错误:

[ERROR] o.h.e.jdbc.spi.SqlExceptionHelper - Duplicate entry '113' for key 'uk_tm_inquiry_id'
[ERROR] c.s.f.c.a.ApiControllerExceptionHandler - org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [uk_tm_inquiry_id]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [uk_tm_inquiry_id]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

我在这里遗漏了什么吗?

快速检查您试图保存的查询对象的对象标识

就在这条线之后

InquiryRecordEntity inquiry = inquiryRecordRepository.findOne(response.getInquiryId());
inquiry.setStatus(InquiryRecordEntity.InquiryStatus.CONCLUDED);
检查System.identityHashCode(查询)的值-将其另存为objId1

就在这条线之后

InquiryRecordEntity inquiry = inquiryRecordRepository.findOne(response.getInquiryId());
inquiry.setStatus(InquiryRecordEntity.InquiryStatus.CONCLUDED);
检查System.identityHashCode(查询)的值-将其另存为objId2

如果objId1objId2不同,则您试图用相同的值保存另一个对象,这就是发生插入的原因,任何唯一的键值都会引发ConstraintViolationException。检查代码中发生这种情况的位置并修复此错误。它不应使用/创建其他对象


如果objId1objId2相同,则操作此对象的状态时出现问题。检查查询对象的id是否已清除。

快速检查要保存的查询对象的对象标识

就在这条线之后

InquiryRecordEntity inquiry = inquiryRecordRepository.findOne(response.getInquiryId());
inquiry.setStatus(InquiryRecordEntity.InquiryStatus.CONCLUDED);
检查System.identityHashCode(查询)的值-将其另存为objId1

就在这条线之后

InquiryRecordEntity inquiry = inquiryRecordRepository.findOne(response.getInquiryId());
inquiry.setStatus(InquiryRecordEntity.InquiryStatus.CONCLUDED);
检查System.identityHashCode(查询)的值-将其另存为objId2

如果objId1objId2不同,则您试图用相同的值保存另一个对象,这就是发生插入的原因,任何唯一的键值都会引发ConstraintViolationException。检查代码中发生这种情况的位置并修复此错误。它不应使用/创建其他对象


如果objId1objId2相同,则操作此对象的状态时出现问题。检查查询对象的id是否已被清除。

您能否从“这里发生了一堆事情,对查询对象进行了更改”中找到一些代码?看起来问题可能就在那里。你为什么首先打电话给save?实体是被管理的,因此它的状态是自动保存的。我不能,但是我再次查看了它,意识到查询对象实际上从未更改过,直到最后的那个条件。中间的代码只决定“查询完成”的值,JBNEZET是吗?我没有看到任何迹象表明这一点。不管怎样,它都应该起作用,对吗?我目前正在进行测试,看看它是否真的在我的代码库中运行。只是做了一个测试,事实并非如此。你能透露一些“这里发生了很多事情,对查询对象进行了修改”中的代码吗?看起来问题可能就在那里。你为什么首先打电话给save?实体是被管理的,因此它的状态是自动保存的。我不能,但是我再次查看了它,意识到查询对象实际上从未更改过,直到最后的那个条件。中间的代码只决定“查询完成”的值,JBNEZET是吗?我没有看到任何迹象表明这一点。不管怎样,它都应该起作用,对吗?我目前正在进行测试,看看它是否真的在我的代码库中运行。只是做了一个测试,事实并非如此。你能透露一些“这里发生了很多事情,对查询对象进行了修改”中的代码吗?看起来问题可能就在那里。你为什么首先打电话给save?实体是被管理的,因此它的状态是自动保存的。我不能,但是我再次查看了它,意识到查询对象实际上从未更改过,直到最后的那个条件。中间的代码只决定“查询完成”的值,JBNEZET是吗?我没有看到任何迹象表明这一点。不管怎样,它都应该起作用,对吗?我目前正在进行测试,看看它是否真的在我的代码库中运行。只是做了一个测试,情况并非如此。