我的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
。
答案 0 :(得分:1)
对于MAX函数(MIN也是),结果类型是字段的类型,因此要返回 null 而不是0,entity.index
应该像Integer
,{ {1}}但没有Long
,int
请参阅官方文档的this table。