2

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

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

@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
4

1 回答 1

8

从空记录集中选择 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")
于 2013-09-30T19:42:39.877 回答