JpaRepository - 删除方法 - 通知该实体不存在

时间:2017-04-26 17:44:11

标签: java spring spring-data-jpa

删除操作期间, JpaRepository 可以通知我实体我要删除不存在

我知道删除方法不会返回布尔值值,也不会抛出异常

我也知道我可以简单地执行exists()或findOne()然后执行删除,但我只是好奇。

有什么方法可以强制执行此操作吗?

我使用的是Spring Boot 1.5.1。 示例代码如下:

public HttpStatus deleteEventByTitle(String eventTitle) {
    try {
        eventRepository.deleteByTitle(eventTitle);
    } catch (EntityNotFoundException e) { // just showing what I want to do
        return HttpStatus.NOT_FOUND;
    }
    return HttpStatus.OK;
}


public interface EventRepository extends JpaRepository<Event, Long> {

    void deleteByTitle(String title);

}

3 个答案:

答案 0 :(得分:3)

从Spring Data JPA(> = 1.7.x)开始,我们可以使用derived deleteremove查询。它可以返回删除的实体数或删除的所有实体。

使用它,我们可以将代码更新为:

public interface EventRepository extends JpaRepository<Event, Long> {
    long deleteByTitle(String title);
}

如果该实体不存在,我们可以抛出异常。

public HttpStatus deleteEventByTitle(String eventTitle) {
    long numOfEntriesDeleted = eventRepository.deleteByTitle(eventTitle);
    if(numOfEntriesDeleted != 1){
       return HttpStatus.NOT_FOUND;
    }
    return HttpStatus.OK;
}

答案 1 :(得分:1)

根据规范,这是不可能的,我不知道这样的功能。

我知道在使用Cassandra和Datastax时,您可以查看wasApplied()

唯一的方法是实现自己的deleteOrThrowException - 方法,并在您找不到实体时抛出异常。

为了实现这一目标,您可以添加

@Query("select count(event)>0 from Event e where eventTitle := eventTitle")
public boolean existsByTitle(String eventTitle);

答案 2 :(得分:0)

您可以在删除之前简单地检查它是否存在:

// Check if the ID is available
if (deviceRepository.existsById(id)) {
    deviceRepository.deleteById(id);
    //returnObject.setMessage("Deleted successfully !!");

} else {
    //returnObject.setMessage("The ID is not found");
}