Hibernate先删除已存在的记录后插入数据的疑问?

我在使用Hibernate更新数据时,尝试先删除一些数据然后再重新插入,

自定义的删除SQL每次都能运行,但是调用saveAll插入却只能间断性成功。

area表中已经存在一条user_id为1,platform_id为1的数据时,删除成功了。但是调用saveAll并没有插入数据。

等到数据库没有这条数据时,再重新执行一遍,删除和插入才都运行了。再执行一次,插入又没有了,请问这是什么原因呢?

// 我先创建了一些区域集合

@Transactional

public void update(InputVo resource){

User user = userRepository.findById(resource.getUserId());

List<area> areas = resources.getAreaIds().stream().map(areaId -> new Area(

new PlatformAreaPK(user, areId), //PlatformAreaPK是一个联合主键

resources.getPlatformId(),

)).collect(Collectors.toList());

// 我先使用自定义的sql删除了用户指定平台的区域

areaRepoistory.aDeleteByUserIdAndPlatformId(userId, platformId)

// 然后使用JPA自带的saveAll或saveAllAndFlush存储新的数据

areaRepository.saveAll(areas);

}

// aDeleteByUserIdAndPlatformId 方法类似如下

@Modifying

// @Transactional

@Query(value = "DELETE FROM area WHERE area.user_id = ?1 AND area.platform_id = ?2", nativeQuery = true)

public void aDeleteByUserIdAndPlatformId(Long userId, Long platformId);


回答:

可以先flush一下 让删除的部分先提交

以上是 Hibernate先删除已存在的记录后插入数据的疑问? 的全部内容, 来源链接: utcz.com/p/944773.html

回到顶部