我正在尝试从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查询,我需要做的是具有与规范行为相同的行为。