在下面,
findAll
和findByUserNameAndPlantId
正在工作,而findAllByPlantId
和findAllByAccessPlantsSet_AccessPlantKey_Plant_PlantIdIn
则不起作用。两者都会生成错误的查询(与 Spring Boot 1.5.3-release 相比)并抛出相同的异常。
它在 Spring Boot 1.5.3 版本中工作,但在 2.7.16 中不起作用。代码有问题吗?
public interface UserPagingAndSortingRepository extends PagingAndSortingRepository<User, Long> {
@Override
Page<User> findAll(Pageable page);
@Query("SELECT DISTINCT u FROM User u LEFT OUTER JOIN u.accessPlantsSet a where (UPPER(u.userName) = UPPER(?1)) and a.accessPlantKey.plant.plantId in (?2)")
Page<User> findByUserNameAndPlantId(String userName, List<Long> plantIds, Pageable page);
@Query("SELECT u FROM User u LEFT OUTER JOIN u.accessPlantsSet ap where ap.accessPlantKey.plant.plantId in (?1)")
Page<User> findAllByPlantId(List<Long> plantIds, Pageable pageParam);
Page<User> findAllByAccessPlantsSet_AccessPlantKey_Plant_PlantIdIn(List<Long> plantIds, Pageable pageParam);
}
更多详细信息请参见此处https://github.com/spring-projects/spring-data-jpa/issues/3226
例外的是
Unable to find com.gtl.industryapp.auth.middleware.domain.Plant with id 12; nested exception is javax.persistence.EntityNotFoundException: Unable to find com.gtl.industryapp.auth.middleware.domain.Plant with id 12
相同的代码在 Spring Boot 1.5.3-RELEASE 中运行正常,没有出现此异常
我对查询和方法名称进行了更改,如下
@Query("SELECT u FROM User u LEFT OUTER JOIN u.accessPlantsSet a WHERE u.userName like :name and a.accessPlantKey.plant.plantId in (:plantIds)")
Page<User> findAllByNameAndPlantId(@Param("name") String name, @Param("plantIds") List<Long> plantIds,Pageable page);
我在另一个类中调用上述方法,如下所示
Page<user> pagedUsers = userPagingAndSortingRepository.findAllByNameAndPlantId("[email protected]",plantIds, pageParam);
我正在得到这个结果。 但是当我使用以下参数调用时,它会抛出相同的异常。有多个用户的用户名具有 test.lt。但它失败了。我认为如果结果中有多个用户,这会失败吗?是这样吗
Page<user> pagedUsers = userPagingAndSortingRepository.findAllByNameAndPlantId("%test.lt%",plantIds, pageParam);
在检查了所有生成的查询和相应的表后,我发现问题是由于数据造成的。 在与 userId 19 相对应的 RM_AccessPlants 表中,有一个 plantId 12,并且该 plantid 12 不存在于 Mstr_Plant 中