从空列返回实体后出现空指针异常

Posted

技术标签:

【中文标题】从空列返回实体后出现空指针异常【英文标题】:nullpointerexception after return entity from empty column 【发布时间】:2020-08-30 20:41:26 【问题描述】:

我正在使用 Spring Boot 开发应用程序。我想从数据库中获取对象,但第一次该对象是空的。我这样做是因为我想限制每天只询问一次 DB。但是,当我返回 empy optiona(我尝试了该解决方案但不起作用)或 null 并提供应该“捕获”它的 if 语句时,我得到了空指针异常。有人知道如何解决吗?

    public Statistics createSaveAndReturnStatistics() 
        User loggedUser = authService.getLoggedUser();
        Statistics statistics = statisticsRepository.findFirstByUserIdOrderByIdDesc(loggedUser.getId());
        ZonedDateTime creationDate = statistics.getCreationDate();

        if (statistics == null || todayWasNotSavedStatistics(creationDate) ) 
           //SOME CODE 
           return statisticsRepository.save(new Statistics());

        
        return statistics;
    

    private boolean todayWasNotSavedStatistics(ZonedDateTime creationDate) 
        ZonedDateTime now = ZonedDateTime.now(ZoneId.of("UTC"));

        return creationDate.getDayOfYear() != now.getDayOfYear() &&
                creationDate.getDayOfYear() <= now.getDayOfYear();
    

【问题讨论】:

【参考方案1】:

我解决了这个问题。有两个问题。解决方案真的很简单,我忘了给Entity添加no args contructor。其次,正如 Eklavya 所说,在检查 null 之前调用 statistics.getCreationDate()。

【讨论】:

【参考方案2】:

在 if 语句中检查 null 之前,您正在调用 statistics.getCreationDate()。 可能这就是你得到 Nullpointerexception 的原因。

你可以这样在if语句中的todayWasNotSavedStatistics()方法中直接发送statistics.getCreationDate()

if (statistics == null || todayWasNotSavedStatistics(statistics.getCreationDate())) 
    //SOME CODE 
   return statisticsRepository.save(new Statistics());

【讨论】:

以上是关于从空列返回实体后出现空指针异常的主要内容,如果未能解决你的问题,请参考以下文章

可自动关闭的惯用语可能出现空指针异常

给ViewPager设置adapter出现空指针异常 解决

实体类在set字段时报空指针异常

模拟获取实体管理器时出现空指针异常

空指针异常 - findViewById()

ResultSet 关闭后不允许出现 ResultSet、空指针异常和 SQLException 操作