java - 如果列表发生唯一约束错误,Spring 不会回滚。如何启用整个列表的回滚?

标签 java spring spring-boot jpa transactions

我有以下带有约束的实体:


// Associated entry
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"userId", "associationDate"}))
public class Association extends coreEntity {

       @Column(nullable = false)
       private Long userId;

       @Column(nullable = false)
       private LocalDate associationDate;

       @Column(nullable = false)
       private LocalTime start;

       @Column(nullable = false)
       private LocalTime end;

       private Duration breakTime;

       @Column(nullable = false)
       @OneToMany(fetch = FetchType.EAGER)
       private Set<ProjectEntry> projects;
    // getter setter

}


// the entry that causes the Problems with unique constraints
@Data
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"projectId", "userId", "date"}))
public class ProjectEntry extends CoreEntity {

    @Column(nullable = false)
    private Long projectId;

    @Column(nullable = false)
    private Long userId;

    @Column(nullable = false)
    private Duration duration;

    @Column(nullable = false)
    private LocalDate anyDate;

    //getter setter

}

服务实现方法


@Override
@Transactional
public Association create(Association association ) {
    checkNotNull(association);
    association.setId(null);

    association.getProjects().forEach(projectEntry -> {
        checkObjectNotNull(projectEntry );
        projectEntryRepo.save(projectEntry);
    });
   // Here is the problem
}
return associationRepo.save(association);


当违反约束时,将会抛出异常。 但是,如果 List 的第一个对象有效,而第二个对象违反了 Unique 约束,则第一个 Entry-create 仍将被提交。但如果有人错了,就不应该犯任何错误。所有请求都应该回滚。 我应该如何注释该方法或处理这个问题?

最佳答案

    @Transactional(rollbackFor = {Exception_NAME.class,...})
    public Association create(Association association ) {...}

关于java - 如果列表发生唯一约束错误,Spring 不会回滚。如何启用整个列表的回滚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61205811/

相关文章:

java - 如何正确配置@Component类

java - 虽然我实现的快速排序方法适用于整数和字符串数组,但此方法不适用于汽车数组

java - 流在 for 循环中不起作用

java - 来自 xml 的 SetbackgroundResource 使 VM 崩溃,内存不足。我该如何优化这个?

java - 将 cURL 转换为 Java 以进行 SOAP 调用

mysql - 如何更正sql语句以给出正确的结果

java - org.springframework.data.mapping.MappingException : Cannot convert type class java. util.ArrayList 到类 java.lang.Object 的实例

java - 在 wicket 中,结合 wicket :link with IAuthorizationStrategy

java - 我的自定义访问器从未使用过,只有字段默认值被 hibernate validator 使用

java - 如何强制RestController响应csv文件