Spring Data JPA查询返回Object,即使结果为null

时间:2015-08-04 20:08:48

标签: spring-data-jpa jpql

我的Spring Data存储库接口上有一个方法,如下所示:

@Query("SELECT MAX(e.index) FROM entity e WHERE e.companyId = :companyId AND e.userId = :userId")
public Integer getMaxIndex(@Param("companyId") Long companyId, @Param("userId") Long userId);

调用代码如下所示:

int currIndex = 0;
Integer maxIndex = userActivityQueueRepository.getMaxIndex(companyId, user.getId());
if (null != maxIndex)
{
    currIndex = maxIndex.intValue() + 1;
}
//else no records exist yet, so currIndex is 0  

//create new records starting at currIndex and incrementing it along the way

问题在于,当还没有记录存在时,它将返回0而不是null。因此,我的currIndex设置为1而不是0。我在JPQL中做错了吗?有什么东西我可以添加到JPQL,所以它的行为就像我期望的那样吗?

我使用Spring Data JPA 1.7.2版和PostreSQL以及EclipseLink。我打开了SQL的日志记录并在数据库中手动运行查询,它给出了我期望的结果。我没理解为什么在没有记录的情况下它不会返回null

1 个答案:

答案 0 :(得分:1)

对于MAX函数(MIN也是),结果类型是字段的类型,因此要返回 null 而不是0,entity.index应该像Integer,{ {1}}但没有Longint

请参阅官方文档的this table