Java 如何使用投影接口和本机查询获取空列记录

Java 如何使用投影接口和本机查询获取空列记录,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,我试图获取数据库表中记录的一些属性,我需要进行子查询,因此我使用本机查询,为此我决定使用投影接口。没有嵌套的投影或类似的东西 我尝试在接口中使用SpEL注释来期望空值,结果相同。我也尝试使用DTO代替,但无法使其工作总是得到无转换器发现错误,我不知道它甚至可以解决我的问题 存储库 @查询值= 挑选+ item.id作为id+ item.name作为名称+ item.description作为描述+ 当item.id不在SELECT bi.item\u id中时的情况+ 来自t\U预订项目bi+

我试图获取数据库表中记录的一些属性,我需要进行子查询,因此我使用本机查询,为此我决定使用投影接口。没有嵌套的投影或类似的东西

我尝试在接口中使用SpEL注释来期望空值,结果相同。我也尝试使用DTO代替,但无法使其工作总是得到无转换器发现错误,我不知道它甚至可以解决我的问题

存储库

@查询值= 挑选+ item.id作为id+ item.name作为名称+ item.description作为描述+ 当item.id不在SELECT bi.item\u id中时的情况+ 来自t\U预订项目bi+ 在bi上加入t_预订b。预订id=b.id+ 在哪里+ b、 开始日期>=:开始日期和b.开始日期=:开始日期和b.结束日期:结束日期+ 然后是真的,否则是假的+ item.barcode作为条形码+ item.serial\u编号作为serialnumber+ 从t_项目+ 其中item.category_id=:categoryId, countQuery=选择计数*+ 从t_项目+ 其中item.category_id=:categoryId, nativeQuery=true 页findAllProjectedBy@ParamcategoryId长类别ID、@ParamstartDate LocalDateTime startDate、@ParamendDate LocalDateTime endDate、可分页; 投影界面

公共接口项可用性视图{ 长getId; 字符串getName; 字符串描述; 布尔getIsAvailable; 字符串获取条形码; 字符串getSerialnumber; } 如果数据库上的记录的所有列均为非null,则会按预期返回。 但是,如果我在投影中期望的其中一列为null,则不会返回该记录。没有错误,只是没有返回记录。 如果我有一个记录集合,其中只有一个记录已经填充了列,那么我可以得到所有记录,只有一个记录的列为空。 在这种特定情况下,条形码列为空,所有其他列的值都正确

如果我在数据库上执行查询,它将按预期工作。问题似乎出在投影上


我是否遗漏了一些东西,可能是一些处理空值的注释?还是说投影在列上不能真正使用空值?

您可以在不分页的情况下尝试,并检查存在的相同行为。除此之外,我想知道本机查询如何在不指定显式计数查询的情况下使用分页?在不使用分页的情况下尝试,结果相同。使用其中一列null尝试了它,但没有返回。相同的场景,但所有列都已填充,返回的结果与预期一致。哦,我不知道这需要一个计数查询。我让它工作,因为我没有足够的项目,需要在这个特定的案件分页。用计数查询更新了它。谢谢您可以在不分页的情况下进行尝试,并检查存在的相同行为。除此之外,我想知道本机查询如何在不指定显式计数查询的情况下使用分页?在不使用分页的情况下尝试,结果相同。使用其中一列null尝试了它,但没有返回。相同的场景,但所有列都已填充,返回的结果与预期一致。哦,我不知道这需要一个计数查询。我让它工作,因为我没有足够的项目,需要在这个特定的案件分页。用计数查询更新了它。谢谢