我从我的表中选择了最大代码,当它有数据时它工作但是当表是空的时我得到错误,如下:
这可能是存储库中的代码:
@Repository("depositRepository")
public interface DepositRepository extends JpaRepository<Deposit,Integer>,
JpaSpecificationExecutor<Deposit> {
@Query("select max(u.code) from Deposit u")
String getMaxCode();
}
这是我在服务中调用获取结果的代码:
String maxCode=depositRepo.getMaxCode();
我得到了错误,如下所述:
Hibernate:
select
max(deposit0_.code) as col_0_0_
from
rems.tbldeposit deposit0_
20:10:55,182 ERROR [rems.controller.DepositController] java.lang.NullPointerException
答案 0 :(得分:7)
从空记录集中选择max()时,DBMS返回null。
如果没有从服务方法中看到更多的代码上下文,很难分辨,但我猜你以后在getMaxCode()结果上调用了一些操作,比如maxCode.equals(...)或maxCode.toString( ),它会给你一个NullPointerException。
为避免异常,您可以在java代码中执行空检查:
String maxCode=depositRepo.getMaxCode();
maxCode = (maxCode==null) ? "0" : maxCode;
或者您可以调整查询以在max(u.code)为null的情况下返回默认值,如下所示:
@Query("select coalesce(max(u.code), '0') from Deposit u")