如何使用CrudRepository将修改后的数据附加到数据库中,而不是替换SpringBoot中的数据

时间:2019-05-13 10:20:40

标签: java spring hibernate spring-boot java-8

我使用实体类的CrudRepository对象获取对象列表。 我想使用修改后的列表中每个对象的某些字段来复制数据库中的列表。如何使用相同的存储库对象来实现?

示例代码如下。它修改数据库中的现有行。我希望它将修改内容添加为数据库中的新行。

@Autowired TestRepository testRepository;

List<SampleClass> sampleList = testRepository.findAllBySomeId(id);
sampleList.forEach(i -> i.setSomeValue(1234));
testRepository.saveAll(testRepository);

我需要制作单独的存储库对象吗?可以用@Autowired注释相同的存储库对象吗?

2 个答案:

答案 0 :(得分:1)

自动装配EntityManager,分离实体并将id设置为null

sampleList.forEach(i -> {
   entityManager.detach(i);
   i.setId(null);
   i.setSomeValue(1234);
});

然后使用相同的存储库保存列表

答案 1 :(得分:1)

例如,您可以在SampleClass中创建一个副本构造函数(不要复制id字段)。之后,您应该复制从数据库收到的所有对象,并将其保存到数据库。您可以这样做:

List<SampleClass> copyList = testRepository.findAllBySomeId(id).stream()
    .map(SampleClass::new)
    .collect(Collectors.toList);;
copyList.forEach(i -> i.setSomeValue(1234));
testRepository.saveAll(copyList);