我是冬眠和弹簧靴的新手。最近,我被分配了一个创建关系型Crud应用程序的任务。问题在于我正在关注的教程正在使用JPARepository,而我正在处理的代码中的先前工作正在使用CRUDRepository。
我的问题是,我可以使用crudRepository deleteAll()函数代替JPARepository的方法deleteAllInBatch()吗?另外,两个界面有何不同?
由于查询,我没有找到任何有用的在线文档。
答案 0 :(得分:1)
简短的回答是,可以使用deleteAll代替deleteAllInBatch。但是您需要知道这些功能的实现是非常不同的。 deleteAllInBatch通过使用一个删除查询来完成其工作。
@Transactional
public void deleteAllInBatch() {
em.createQuery(getDeleteAllQueryString()).executeUpdate();
}
private String getDeleteAllQueryString() {
return getQueryString(DELETE_ALL_QUERY_STRING, entityInformation.getEntityName());
}
public static final String DELETE_ALL_QUERY_STRING = "delete from %s x";
另一方面,deleteAll()会导致findAll,然后我们将遍历所有实体并为每个实体调用delete。
@Transactional
public void deleteAll() {
for (T element : findAll()) {
delete(element);
}
}
我们可以看到deleteAll导致N + 1个请求,其中N是目标表的总大小。