我使用的是Spring数据jpa,MySQL。
我有以下实体

User {
    BigDecimal userNo;
    String name;
}

Mysql表看起来像,
user(userNo decimal(10, 0), name text);

我想搜索所有以例如12开头的usersuserNo
如何在spring data jpa中实现。
我试着用,
userDao.findByUserNoStartingWith(BigDecimal userNo);

但它不起作用并抛出异常
org.springframework.dao.invaliddataaccessapiusagexception:参数值[12%]与预期类型[java.math.BigDecimal(n/a)]不匹配;嵌套异常为java.lang.IllegalArgumentException:参数值[12%]与预期类型[java.math.BigDecimal(n/a)]
如何使用派生查询或jpa查询进行搜索?

最佳答案

我想你最好的办法是写一个查询

select *
from   user
where  cast(userNo as char) like 12%

由于Spring数据不能自己生成这样的查询,因此您必须自己指定它。由于cast不是JPQL,您还必须告诉Spring Data这是一个本地SQL查询。
public interface UserDao extends JpaRepository<User, BigDecimal> {
    @Query(value = "select u from user u where cast(userNo as char) like :userNo%",
           native = true)
    public List<User> find(@Param("userNo") String userNo);
}

10-08 12:54