我正在使用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查询进行搜索?
答案 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);
}