spring-data-jpa - 如何使 Spring Data JPA 存储库在没有结果时返回异常?
问题描述
我正在将现有项目迁移到 Spring Data JPA 存储库。
在旧项目中,我的 DAO 如下所示:
public class MovieDAOImp implements MovieDAO {
public Movie findByTitle(String title) throws NoResultException {
/... query the db, if no Movie, throw new NoResultException */
}
}
新的 Spring JPA 实现看起来像这样......
public interface MovieRepository extends JpaRepository<Movie, Integer> {
Movie findByTitle(String title);
}
findByTitle
如果没有电影,在新版本中将返回 null,但我希望它抛出异常(最好是我的 NoResultException,但任何异常都可以)。
我遇到的问题是我的所有服务都实现了预期 NoResultException 发生。
我不想重新处理我的所有服务来检查空值。
有没有办法让 JpaRepository 在没有结果时抛出异常?
解决方案
我无法找到我的问题的直接答案,所以我想出了这个解决方法......
我继续实现自己的 DAO 并在repo
内部使用。
这样做的好处是让我可以完全控制 DAO 接口,包括抛出的异常,因此我不必重新处理我的服务。
但它的缺点是添加了额外的层。
public class MovieDAOImp implements MovieDAO {
@Autowired
private MovieRepository repo;
public Movie findByTitle(String title) throws NoResultException {
Movie ret = repo.findByTitle(title);
if (ret == null) {
throw new NoResultException("Unable to find movie by title '"+title+"'.");
}
return ret;
}
}
如果有人想出更好的方法来做到这一点,请发布答案!
推荐阅读
- javascript - 为什么有些 cookie 无法从 document.cookie 中获取?
- ruby-on-rails - 遍历延迟加载数组
- html - 如何在 HTML 中的段落末尾(共 3 行)制作星号
- java - 当我在 org.eclipse.core.runtime.jobs.Job.Job(String name) 内部使用时,没有调用 ISafeRunnable 的 run() 方法
- java - 如何在 AfterScenario JBehave 中获取场景的运行状态
- mysql - mysql行转列后如何在mybatis中显示结果?
- java - 宁静的服务并非全部 重新部署后正常工作
- gstreamer - 实际上是否可以使用 GStreamer 将字幕混合到 .mkv 文件中?
- sql - SQL根据值将一列拆分为两列并使用列
- python - 删除 Python 字典中的嵌套键