Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/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 将对象列表保存到db,但如果一条记录失败,则继续jpa spring引导_Java_Spring_Spring Boot_Jpa - Fatal编程技术网

Java 将对象列表保存到db,但如果一条记录失败,则继续jpa spring引导

Java 将对象列表保存到db,但如果一条记录失败,则继续jpa spring引导,java,spring,spring-boot,jpa,Java,Spring,Spring Boot,Jpa,我试图在for循环中使用repository.save(entity)在数据库(MS SQL)中保存一长串对象,但我希望,如果一个对象在插入时失败,我知道是因为它缺少字段或违反了某个键,请继续其他对象,但不要为每个要插入的对象创建事务。一次交易中的所有功能。 我在stack上看到了许多关于如何使用norollbackon等的帖子,但我总是会收到错误“org.springframework.transaction.UnexpectedRollbackException:事务已被标记为仅回滚,因此事

我试图在for循环中使用repository.save(entity)在数据库(MS SQL)中保存一长串对象,但我希望,如果一个对象在插入时失败,我知道是因为它缺少字段或违反了某个键,请继续其他对象,但不要为每个要插入的对象创建事务。一次交易中的所有功能。 我在stack上看到了许多关于如何使用norollbackon等的帖子,但我总是会收到错误“org.springframework.transaction.UnexpectedRollbackException:事务已被标记为仅回滚,因此事务已自动回滚”

我想继续循环,即使对象因任何异常而失败……有可能吗?我认为没有办法

如果单个对象失败,我不希望进行任何常规回滚,只希望在同一事务中回滚该对象

我留下密码:

General method in controller has: @Transactional(propagation = Propagation.REQUIRED, noRollbackFor = Exception.class)

insert in the loop of objects

try {
                        
    productoService.saveProduct(prodTmp);
                        
}catch(Exception e) {
                        
}

Method productService.saveProduct:

    @Transactional
    public Producto saveProduct(Producto prod) {
    
        return productoRepository.save(prod); 
    }

这根本是不可能的,原因是当你尝试提交事务时,它会失败。想象一下,你必须插入一百万个产品,当它到达最后一个产品时,由于密钥重复而失败,你是不是在告诉我,你一直在做这个过程对于一个简单的失败是毫无价值的一个产品?spring真的不能处理这个问题吗?…因为为每个产品创建一个事务需要很长时间而且不可行,即使你要求客户提供完美的数据,他们也可能失败。我不能在记录失败时插入上面的内容并为剩余的产品创建另一个新事务吗?没有什么特别的关于spring,在这里,一旦您开始事务,您需要在所有语句的末尾提交/回滚。您需要的是忽略中间的一些语句,这是数据库afaik不支持的。顺便说一句,您想要的东西毕竟会留下不一致的db状态。想象一下,您已经实现了您想要的行为,那么fail呢那么ed记录呢?你也可以在这里写你的自定义upsert(即,如果这是唯一的情况,在重复键上插入和更新)。此外,我看不到任何提到
saveAll
jpa的痕迹,你可以最后尝试一下。我想要的是,好的只保存,不失败的则跳过