Spring Data JPA:在排序列中出现空值时,结果行丢失

时间:2018-06-21 21:28:23

标签: java jpa spring-data-jpa spring-data jpql

我正在尝试从Spring Data JPA存储库中获取数据,该存储库将JPQL与sort列一起抛出。此列对应于带有OneToMany批注的字段。 结果中不存在该字段中为空的任何值。 仅当数据请求抛出JPQL时,此行为才存在。如果我构造相同的查询引发,规范并调用repository.findAll(specification, paggeble),则一切正常。

在这篇文章Spring-data JPA repository Order by losing null values in results中,该错误修复是从1.2.1版开始的Spring Data中的错误修复。但是我尝试使用1.11.13版,但该错误仍然存​​在。

代码片段,以便更好地理解:

@Repository
public interface MyEntityRepository extends JpaRepository<MyEntity, Integer>, JpaSpecificationExecutor<MyEntity> {

    @Query(value =
        "SELECT e "
        + "  FROM MyEntity e "
        + "  WHERE e.flg = :flg "
        + "";)
    Page<MyEntity> findByFlg(
        Pageable pageable
    );
}

public class Service {

    //This method return full result. 
    //If field dept.someField is null MyEntity obj still exists in page
    public Page<MyEntity> findDataSpec(Pageable pageable) { //sort[dept.someField:ASC]
        Specification<MyEntity> specification = (root, criteriaQuery, criteriaBuilder) -> {
            Path flg = root.get("flg");
            return criteriaBuilder.equal(flg, "1");
        };
        Page<MyEntity> page = myEntityRepository.findByDeptAndTpAndKnd(specification, pageable);
        return page;
    }

    //This method return wrong result. 
    //If field dept.someField is null MyEntity obj escape from page
    public Page<MyEntity> findDataJpql(Pageable pageable) {//sort[dept.someField:ASC]
        Page<MyEntity> page = myEntityRepository.findByFlg("1", pageable);
        return page;
    }
}

可以有人解释为什么两个相同的查询工作如此不同,而哪个查询却出错了。 对于JPQL查询,我需要做的是具有与规范行为相同的行为。

0 个答案:

没有答案