当我的表没有数据时,从表中选择最大ID时出现错误

时间:2013-09-30 13:38:01

标签: spring-data spring-data-jpa

我从我的表中选择了最大代码,当它有数据时它工作但是当表是空的时我得到错误,如下:

这可能是存储库中的代码:

@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

1 个答案:

答案 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")