为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 SpringData 在字符串中以随机顺序在多个 LIKE 中搜索单词

如何使用 SpringData 在字符串中以随机顺序在多个 LIKE 中搜索单词

青春有我 2022-06-04 14:58:25
我有字符串“AlphaBetaZeta GammaTheta”(来自 MS SQL 数据库的表字段),我需要使用具有许多类似的弹簧数据和随机顺序和关键字的随机计数进行搜索我正在尝试搜索:findByLabelContaining(Collection<String> labels)findByLabelLike(Collection<String> labels)但这些不起作用。在数据库中启用全文搜索或使用弹性我不能,只有带有本机接口方法或自定义 jpql-query 的 Spring-Data。SELECT id, labelFROM TABLE10WHERE label like '%gam%' AND      label like '%alpha%' AND      label LIKE '%theta%'SELECT id, labelFROM TABLE10WHERE label like '%alpha%' AND      label like '%theta%'和更多..
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

使用自定义本机查询:


@Query(value = "SELECT id, label

FROM TABLE10

WHERE label like %?1%", native = true)

  List<User> findByLabel(String a);

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#_using_advanced_like_expressions


如果您需要可变数量的参数,则必须编写自己的查询:


@PersistenceContext

EntityManager entityManager;


@Override

public List<YourClass> findByLabelLike(List<String> labels) {

    String q = "SELECT id, label FROM TABLE10";


    for (String l : labels) {

       // Add where and ORs

    }


    Query query = entityManager.createNativeQuery(q, YourClass.class);

    int i = 0;

    for (String label : labels) {

          query.setParameter(++i, "%"+label+"%");

    }


    return query.getResultList();

}


查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信