当前位置: 首页 > 知识库问答 >
问题:

按数字搜索从Spring数据jpa开始

孔磊
2023-03-14

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

User {
    BigDecimal userNo;
    String name;
}

Mysql表如下所示,

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

我想搜索所有用户,这些用户的用户名以say开头,例如12。如何在spring数据jpa中实现这一点。

我试着用,

userDao.findByUserNoStartingWith(BigDecimal userNo);

但它不工作并抛出异常

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

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


共有1个答案

商正诚
2023-03-14

我认为您最好的选择是编写一个类似的查询

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

由于Spring数据本身无法生成这样的查询,因此您必须自己指定它。由于cast不是JPQL,您还必须告诉Spring数据这是一个本机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);
}
 类似资料:
  • 我有以下收藏: 我想通过firstname和/或lastname搜索用户(firstname/lastname/firstname+lastname)。 编辑3: 错误:

  • 我正在使用: neo4j 2.0。1 我有一个具有属性名称的节点人员,我想用Lucene语法搜索该属性。我在我的存储库中使用findByNamelike方法,它非常适合像value*或*value或*etc这样的查询。 但是我需要这样的查询{A*TO D*}。我发现了一个弃用的方法findAllByQuery(名称,查询),用这个方法我可以实现我的需求。 > 我还注意到,如果我从cypher创建节

  • 升级到Spring boot 2.3和Spring data elasticsearch 4.0.9后的问题。我有这样的文档: 这在spring data 3.0中与Jackson配合得很好,但升级到4.0后,Jackson不再可用,现在我收到了一个来自spring的实例化异常,无法实例化URL对象。 例外情况: 任何关于解决方案的想法都将受到赞赏。

  • 我不理解高级REST客户机(它取代了传输客户机)和Spring Data ElasticSearch之间的关系。 有一些教程(https://www.baeldung.com/spring-data-elasticsearch-tutorial)展示了如何使用像getSomethingById()这样的自动实现方法进行JPA风格的查询。他们利用这个接口: 所以如果我想使用最新的官方客户端,对我来说

  • 我正在尝试使用查询搜索出生日期 我如何才能搜索dob在等位日期格式?

  • 发出来攒人品 1.讲述一个项目 2.讲述实习中跟的一个项目 3.有做过ABtest吗,有了解吗 4.有常用的软件吗,最喜欢的一个功能是什么(说了b站,单列视频) B站为什么要上线单列功能,为什么有了双列还要单列 如果你是b站的数据分析师,怎么验证单列功能上线,ABtest核心指标 如果b站用户反馈推的视频太雷同了,作为数据分析师怎么推进解决 5.sql问题,窗口函数是什么 面试评价:框架感薄弱、单