按编号搜索以spring数据jpa开头

时间:2015-08-06 10:58:51

标签: java mysql spring-data-jpa

我正在使用Spring数据jpa,MySQL。 我有以下实体

User {
    BigDecimal userNo;
    String name;
}

Mysql表看起来像,

user(userNo decimal(10, 0), name text);

我想搜索users 开头的所有userNo,例如12。 我怎样才能在spring data jpa中做到这一点。

我尝试过使用,

userDao.findByUserNoStartingWith(BigDecimal userNo);

但它不起作用并抛出异常

  

org.springframework.dao.InvalidDataAccessApiUsageException:参数值[12%]与预期类型[java.math.BigDecimal(n / a)]不匹配;嵌套异常是java.lang.IllegalArgumentException:参数值[12%]与预期类型[java.math.BigDecimal(n / a)]

不匹配

如何使用派生查询或jpa查询进行搜索?

1 个答案:

答案 0 :(得分:4)

我认为你最好的选择就是写一个类似

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

由于Spring Data本身无法生成此类查询,因此您必须自己指定。由于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);
}