【问题标题】:Spring Data JPA Method naming contains query for double valueSpring Data JPA 方法命名包含对双值的查询
【发布时间】: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


【解决方案1】:

你可以尝试使用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

【讨论】:

    猜你喜欢
    • 2017-04-10
    • 2017-09-17
    • 2020-02-09
    • 2021-09-18
    • 2020-05-31
    • 1970-01-01
    • 2018-07-02
    • 2022-01-23
    • 2015-04-11
    相关资源
    最近更新 更多