You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot酒店名称模糊搜索仅首字母匹配可返回结果问题

问题根因

你遇到的检索不生效问题,通常是两个原因导致:

  1. JPA方法命名和实体字段不匹配:如果你的Hotel实体类中存储酒店名的字段是hotelName,方法名里的Content属于多余字符,会被JPA识别为字段名的一部分,找不到对应字段就会默认走首字母匹配规则。
  2. 规则使用错误:Like关键词需要配合自定义的通配符使用,但如果方法名带了ContentLike/StartingWith这类固定规则的关键词,你自己拼接的%通配符会被规则覆盖,只能匹配首字母对应的内容。

修复方案

你可以选择任意一种适配方案修改:

方案1:修改JPA方法命名为全字段模糊匹配规则

直接把Repository层的方法名改为findAllByHotelNameContainingIgnoreCase,这个命名对应的规则是全字段任意位置匹配,且自动忽略大小写,不需要你手动拼接通配符和转小写,修改后的业务层代码如下:

/**
 *
 * @param searchkey 搜索关键词
 * @return 匹配的酒店列表
 */
public List<Hotel> searchHotelByName(String searchkey){
    return hotelRepository.findAllByHotelNameContainingIgnoreCase(searchkey);
}

如果你需要保留手动转小写的逻辑,也可以去掉方法名里的IgnoreCase后缀,自行处理搜索词的大小写转换。

方案2:自定义查询语句固定匹配规则

如果你不想修改原方法名,可以在Repository层的对应方法上添加@Query注解,明确指定模糊匹配逻辑:

@Query("select h from Hotel h where lower(h.hotelName) like concat('%', lower(:searchkey), '%')")
List<Hotel> findAllByHotelNameContentLike(@Param("searchkey") String searchkey);

业务层代码不需要做任何调整即可生效。

内容的提问来源于stack exchange,提问作者Sanath Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:18:03