我在服务类中的2种不同方法和事务中使用Spring Data JPA Repository方法deleteAll()和saveAll(List)。在deleteAll()调用之后,调用saveAll(List)方法来重新填充表,但是我不断收到org.hibernate.ObjectDeletedException:已删除实例传递给合并错误。
@Service
ServiceClass
{
@Autowired MyRepository repository;
public void test()
{
List<myEntity> entities = new ArrayList<>();
//code to populate list
clearTable();
populateTable(entities);
}
@Modifying
@Transactional
private void clearTable()
{
repository.deleteAll();
}
@Modifying
@Transactional
private void populateTable(List<myEntity> entities)
{
repository.saveAll(entities);
}
}
//Repository class
public interface MyRepository extends CrudRepository<myEntity, Long>
{
}
答案 0 :(得分:0)
CrudRepository中delete的内部实现与
@Transactional
public void delete(T entity) {
Assert.notNull(entity, "The entity must not be null!");
em.remove(em.contains(entity) ? entity : em.merge(entity));
}
在删除实体之前,该实体必须处于管理状态。我们可以使用某些功能进行合并,查找等操作。注意:关闭EntityManager后,将分离其所有实体。
删除后也要提交