【发布时间】:2018-01-03 06:03:11
【问题描述】:
我正在使用 Spring Data JPA v1.10.2 还有一个用例:
ClientDao.java:
List<Client> getClientsByUnitsIn(@NonNull Collection<Unit> units);
这个方法生成一个类似这样的 SQL 查询:
SELECT * FROM clients WHERE units in (?1)
当我为存储库方法添加@Query注解时,也有类似的情况:
@Query("SELECT c FROM Client c WHERE c.unit IN (?1)")
List<Client> getSpecificClients(@NonNull Collection<Unit> units)
但在许多情况下,参数units 可能为空。在这种情况下,该方法应该返回空结果,但它只是失败并显示有关错误 SQL 语句的消息。
我使用一种解决方法:向存储库添加一个默认方法,如下所示:
default List<Client> getSpecificClientsOrEmpty(@NonNull Collection<Unit> units){
if (units.isEmpty) {
return emptyList();
}
return getSpecificClients(units);
}
但我不喜欢这种解决方法:
- 我必须为每个案例创建一个额外的方法
- 我必须检查是否只有默认方法在代码中使用,因为没有编译时检查,如果我错过了一些使用,我会得到一个运行时异常。
有人有更好的解决方案吗?
【问题讨论】:
-
更新:我找到了一篇关于我的案例的文章:rzymek.github.io/post/jpa-empty-in 有一个解决方案,但看起来不够漂亮。
标签: java spring jpa spring-data