JPA在查询命名参数问题



在下面的查询中,如果我试图运行查询,例如给出"488"作为年龄。这个JPA查询认为它是4,并相应地返回错误的结果。我不知道为什么JPA在这种情况下修剪第二和第三个字符。任何建议都会很好。我想退回年龄大于488的所有产品(示例)。如果我将大于(>)符号替换为等于,那么JPA不会删除任何字符,并返回年龄为"488"的所有产品。

@Query("SELECT new com.model.Result(am.product, am.age)"
+ "FROM Table am WHERE am.age > :age")
List<Result> queryResult(@Param("age") String age );

我假设年龄是数字类型。那么你也必须使用相同的类型。例如Integer

@Query("SELECT new com.model.Result(am.product, am.age)"
+ "FROM Table am WHERE am.age > :age")
List<Result> queryResult(@Param("age") int age );

您在这里看到的是词法比较。当您希望将字符串解释为数字以便能够进行数字比较时,您必须强制转换:

@Query("SELECT new com.model.Result(am.product, am.age)"
+ "FROM Table am WHERE cast(am.age as integer) > :age")
List<Result> queryResult(@Param("age") int age);