在删除操作期间, 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);
}
答案 0 :(得分:3)
从Spring Data JPA(> = 1.7.x)开始,我们可以使用derived delete
或remove
查询。它可以返回删除的实体数或删除的所有实体。
使用它,我们可以将代码更新为:
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");
}