首页 > 解决方案 > 使用 Panache 选择字符串包含子字符串的位置

问题描述

我目前正在尝试使用 Ms SQL-Server 和 Panache-Repositories 实现“加载 X.name 包含 y 的所有 X”功能。我知道 SQL 查询 "SELECT * FROM X WHERE X.name LIKE '%0y%'" 有效,但我无法使用 Panache-Query 让它工作。我试过了

@ApplicationScoped
public class XRepository implements PanacheRepository<X> {

  public List<X> listWhereLike(String like) {
    return list("name like ?1", "%" + like + "%");
  }

  public List<X> listWhereLike(String like) {
    return list("name like %?1%", like);
  }

  public List<X> listWhereLike(String like) {
    return list("contains(name, ?1)", like);
  }
}

但它们都不起作用。它们要么由于意外字符“%”或“(”而引发异常,要么只是返回一个空列表。

我错过了什么?

标签: sqljpasubstringcontainsquarkus-panache

解决方案


这就是解决方案,您只需将模式放入字符串中,然后再将其添加到查询中;

  public List<X> listWhereLike(String like) {

    String searchInput = "%" + like + "%";

    return list("name like ?1", searchInput );
  }

推荐阅读