Spring 数据 JPA 方法命名包含对双精度值的查询
Spring Data JPA Method naming contains query for double value
我有一个包含一些属性的实体,我想使用来自前端控制器的一个参数为其所有属性编写一个类似(包含)的查询。我已经成功地实现了字符串值,但对于数字(长、双)值,我不能使用包含关键字,因为它会抛出异常(参数值 ['%10%'] 与预期类型不匹配 java.lang.Double ()... 某物...)。
我的实体字段
private String firstName;
private double rating;
我的仓库查询方法
List<MobileUser> findByFirstNameIgnoreCaseContainingOrRatingContaining(String value, double value2);
我的服务层方法只取一个值
public List<MobileUserDTO> getMobileUsersLike(String value) {
// parses the value and if it is not a numeric value it will be -1 (this is also a bad logic)
Double parseDouble = (double) -1;
try { parseDouble = Double.parseDouble(value); } catch (NumberFormatException ignored) { }
// calls repository
List<MobileUser> allUsersLike = mobileUserRepository.findByFirstNameIgnoreCaseContainingOrRatingContaining(value, parseDouble);
return getMobileUserDtoList(allUsersLike);
}
我该如何实现?谢谢。
您可以尝试使用JPQL查询:
@Query("FROM MobileUser WHERE firstName like %:firstName% OR CAST(rating AS TEXT) LIKE %:rating% ")
List<MobileUser> findByNameAndRating(@Param("name") String firstName, @Param("rating") String rating);
您不能将 SQL like
用于 double
,除非您将其转换为 String
。
我有一个包含一些属性的实体,我想使用来自前端控制器的一个参数为其所有属性编写一个类似(包含)的查询。我已经成功地实现了字符串值,但对于数字(长、双)值,我不能使用包含关键字,因为它会抛出异常(参数值 ['%10%'] 与预期类型不匹配 java.lang.Double ()... 某物...)。
我的实体字段
private String firstName;
private double rating;
我的仓库查询方法
List<MobileUser> findByFirstNameIgnoreCaseContainingOrRatingContaining(String value, double value2);
我的服务层方法只取一个值
public List<MobileUserDTO> getMobileUsersLike(String value) {
// parses the value and if it is not a numeric value it will be -1 (this is also a bad logic)
Double parseDouble = (double) -1;
try { parseDouble = Double.parseDouble(value); } catch (NumberFormatException ignored) { }
// calls repository
List<MobileUser> allUsersLike = mobileUserRepository.findByFirstNameIgnoreCaseContainingOrRatingContaining(value, parseDouble);
return getMobileUserDtoList(allUsersLike);
}
我该如何实现?谢谢。
您可以尝试使用JPQL查询:
@Query("FROM MobileUser WHERE firstName like %:firstName% OR CAST(rating AS TEXT) LIKE %:rating% ")
List<MobileUser> findByNameAndRating(@Param("name") String firstName, @Param("rating") String rating);
您不能将 SQL like
用于 double
,除非您将其转换为 String
。