Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
Spring boot Sprint Data JPA-save()方法在表中插入重复项_Spring Boot_Spring Data Jpa - Fatal编程技术网

Spring boot Sprint Data JPA-save()方法在表中插入重复项

Spring boot Sprint Data JPA-save()方法在表中插入重复项,spring-boot,spring-data-jpa,Spring Boot,Spring Data Jpa,我有一个停机实体。我正在设置停机对象的值,并将这些对象传递到JpaReposirtory保存(停机对象)方法保存()插入重复记录。我通过论坛,但没有运气,我没有得到任何解决方案。现在,我正在将对象保存到数据库中之后,检查是否插入了重复项。如果插入,我将通过JpaRepositorydelete(downtimeId)删除 我的向下实体 @Entity @Table(name = "tDownTime") public class DownTime { @Id @Generated

我有一个停机实体。我正在设置停机对象的值,并将这些对象传递到JpaReposirtory
保存(停机对象)
方法<代码>保存()插入重复记录。我通过论坛,但没有运气,我没有得到任何解决方案。现在,我正在将对象保存到数据库中之后,检查是否插入了重复项。如果插入,我将通过JpaRepository
delete(downtimeId)
删除

我的向下实体

@Entity
@Table(name = "tDownTime")
public class DownTime {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "DowntimeId")
    private int downtimeId;

    @Column(name = "SiteId")
    private int siteId;

    @Column(name = "PlantId")
    private int plantId;

    @Column(name = "UnitId")
    private int unitId;

    @Column(name = "EquipmentId")
    private int equipmentId;

    @Column(name = "ShiftId")
    private int shiftId;

    @Column(name = "DownTimeReasonId")
    private Integer downTimeReasonId;

    @Column(name = "DownTimeReasonName")
    private String downTimeReasonName;

    @Column(name = "DownTimeReasonDescription")
    private String downTimeReasonDescription;

    @Column(name = "DownTimeStartDate")
    private LocalDate downTimeStartDate;

    @Column(name = "DownTimeStartTime")
    private LocalTime downTimeStartTime;

    @Column(name = "DownTimeEndDate")
    private LocalDate downTimeEndDate;

    @Column(name = "DownTimeEndTime")
    private LocalTime downTimeEndTime;

    @Column(name = "DownTimeDuration")
    private Long downTimeDuration;

    @Column(name = "HourResetTime")
    private LocalDateTime hourResetTime;

    @Column(name = "KPIDate")
    private LocalDate kPIDate;

    @Column(name = "CreatedBy")
    private String createdBy;

    @Column(name = "CreatedOn")
    private LocalDateTime createdOn;

    @Column(name = "ModifiedBy")
    private String modifiedBy;

    @Column(name = "ModifiedOn")
    private LocalDateTime modifiedOn;

    @Column(name = "SKUId")
    private int sKUID;

    @Column(name = "DownTimeStartDateTime")
    private LocalDateTime downTimeStartDateTime;

    @Column(name = "DownTimeEndDateTime")
    private LocalDateTime downTimeEndDateTime;

    @Column(name = "WorkOrderId")
    private int workOrderId;

    @Column(name = "IsManual")
    private boolean isManual;

    @Column(name = "AutoPauseResume")
    private boolean isAutoPauseResume;

    @Column(name = "DowntimeType")
    private String downtimeType;

    @Column(name = "DownTimeStatus")
    private String downtimeStatus;

DownTime downTime = new DownTime();// creating object for setting values to object to save as entity

downTime.setUnitId(calculationOEEHelper.getUnitId());   downTime.setEquipmentId(calculationOEEHelper.getEquipmentId());
downTime.setShiftId(calculationOEEHelper.getShiftId());
downTime.setDownTimeReasonId(0);
downTime.setDownTimeReasonName(ParameterTags.UNASSIGNED);
.
.
.

downTime = downtimeRepository.save(downTime);
它正在数据库中插入2个实体。我正在使用MSSQL数据库

停机时间[downtimeId=2148,siteId=1,plantId=1,unitId=12, equipmentId=33,shiftId=28,downTimeReasonId=0, downTimeReasonName=未分配,downTimeReasonDescription=未分配, downTimeStartDate=2019-05-11,downTimeStartTime=06:36:42, downTimeEndDate=2019-05-11,downTimeEndTime=06:37:23, 停机时间=41小时设置时间=2019-05-11T07:30:01, kPIDate=2019-05-11,createdBy=SYSTEM, createdOn=2019-05-12T01:06:55.865,由系统修改, 修改日期:2019-05-12T01:06:55.865,sKUID=5, DowntimesStartDateTime=2019-05-11T06:36:42, downTimeEndDateTime=2019-05-11T06:37:23,workOrderId=74, isManual=false,isAutoPauseResume=true,downtimeType=NOT SCHEDULED, downtimeStatus=正在运行]

停机时间[downtimeId=2149,siteId=1,plantId=1,unitId=12, equipmentId=33,shiftId=28,downTimeReasonId=0, downTimeReasonName=未分配,downTimeReasonDescription=未分配, downTimeStartDate=2019-05-11,downTimeStartTime=06:36:42, downTimeEndDate=2019-05-11,downTimeEndTime=06:37:23, 停机时间=41小时设置时间=2019-05-11T07:30:01, kPIDate=2019-05-11,createdBy=SYSTEM, createdOn=2019-05-12T01:06:55.865,由系统修改, 修改日期:2019-05-12T01:06:55.865,sKUID=5, DowntimesStartDateTime=2019-05-11T06:36:42, downTimeEndDateTime=2019-05-11T06:37:23,workOrderId=74, isManual=false,isAutoPauseResume=true,downtimeType=NOT SCHEDULED, downtimeStatus=正在运行]

downtimeId不同,其余的都是相同的


有人能帮我解决这个问题吗。

我不确定我是否理解你想要实现的目标,但这似乎是预期的行为。如果要更新对象而不是创建新对象,则应从存储库中获取旧版本并在其上设置值。

我不确定是否理解您试图实现的目标,但这似乎是预期的行为。如果要更新对象而不是创建新对象,则应从存储库中获取旧版本并在其上设置值。

是否可以在保存/持久化方法之前共享更多日志或添加一些日志记录程序?查看实体和持久化方法很难判断幕后发生了什么。您的对象具有不同的ID,它们不是重复的。这些不是Java对象。我在这里复制了DB RecordsCan在save/persist方法之前是否共享更多日志或添加一些日志?查看实体和持久化方法很难判断幕后发生了什么。您的对象具有不同的ID,它们不是重复的。这些不是Java对象。我在这里复制了数据库记录我在这里发布的是那些是数据库记录。不是Java对象。您发布了一个表示数据库DB表的实体类,我假设您使用的是某种类似于Hibernate的ORM(简单地说就是将数据库行映射到Java对象)。现在,当您使用
downtimeRepository.save(宕机)时,您的应用程序在表
tDownTime
中插入新行,因为您创建了新实体而不是更新旧实体。要更新旧实体,您应该首先从存储库中获取它(尝试
downtimeRepository.findAll()
downtimeRepository.findOne()
),然后使用setters更新数据,最后使用
downtimeRepository.save()
保存更改。您可以进一步了解它,我在这里发布的是数据库记录。不是Java对象。您发布了一个表示数据库DB表的实体类,我假设您使用的是某种类似于Hibernate的ORM(简单地说就是将数据库行映射到Java对象)。现在,当您使用
downtimeRepository.save(宕机)时,您的应用程序在表
tDownTime
中插入新行,因为您创建了新实体而不是更新旧实体。要更新旧实体,您应该首先从存储库中获取它(尝试
downttimerepository.findAll()
downttimerepository.findOne()
),然后使用setters更新数据,最后使用
downttimerepository.save()
保存更改。您可以详细阅读