我使用了Spring Data JPA的删除方法,但我想知道为什么
deleteById
方法和delete
方法都没有任何返回值。
在delete方法的实现中,有一个
if
的说法,当要删除的实体不存在时,不返回任何内容。
public void delete(T entity) {
Assert.notNull(entity, "Entity must not be null!");
if (entityInformation.isNew(entity)) {
return;
}
Class<?> type = ProxyUtils.getUserClass(entity);
T existing = (T) em.find(type, entityInformation.getId(entity));
// if the entity to be deleted doesn't exist, delete is a NOOP
if (existing == null) {
return;
}
em.remove(em.contains(entity) ? entity : em.merge(entity));
}
就我个人而言,我认为在这种情况下返回
Boolean
值可能是一种适当的方法,因为控制器层将了解删除状态,并且可以向视图层提供更可靠的警报消息。
Spring Data JPA 按照他们的想法设计了一些内置方法,并为我们提供了使用其他方式的选项。 您可以使用 Spring Data JPA 支持的派生删除查询轻松获取已删除的记录及其计数(参考)
@Repository
public interface FruitRepository extends JpaRepository<Fruit, Long> {
Fruit deleteById(Long id); // To get deleted record
}
@Repository
public interface FruitRepository extends JpaRepository<Fruit, Long> {
Long deleteById(Long id); // To get deleted record count
}
使用
@Modifying
和 @Query
ant 它将返回已删除的行数。
@Repository
public interface FruitRepository extends JpaRepository<Fruit, Long> {
@Modifying
@Query(value = "DELETE FROM Fruit f where f.id = ?1")
int costumDeleteById(Long id);
}
另一种选择是遵循这个答案的建议并检查受影响的实体数量是否为1(如果是
deleteById
方法)。