我使用的是Spring数据jpa,MySQL。
我有以下实体
User {
BigDecimal userNo;
String name;
}
Mysql表看起来像,
user(userNo decimal(10, 0), name text);
我想搜索所有以例如12开头的
users
的userNo
。如何在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);
}