【发布时间】:2020-02-24 23:25:04
【问题描述】:
我有一个包含一些属性的实体,我想使用来自前端控制器的一个参数为其所有属性编写一个类似(包含)查询。我已经成功地为字符串值实现了它,但对于数字(long,double)值,我不能使用包含关键字,因为它会引发异常(参数值 ['%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);
}
我如何做到这一点?谢谢。
【问题讨论】:
-
您是使用普通 SQL 还是 JPQL 作为查询语言?
-
也许你应该使用 CriteriaBuilder,看看这个其他问题:stackoverflow.com/questions/43603951/… 如果你以前没有使用过 CriteriaBuilder,那么看看这个:) -> spring.io/blog/2011/04/26/…
-
如何使用 SQL 的
like表达式来表示Double?您能否详细描述您的问题,以便我们提出更好的解决方案? -
@sanemain JPQL 查询方法。没有查询注释。只有方法名。
-
@Vusal 我可以通过本机查询将类似查询用于双精度。它也适用于 mysql 中的 int 和 long 。但我在 spring data jpa 中需要这个。
标签: mysql spring hibernate spring-data-jpa repository