如何与很多喜欢以搜索字符串字与SpringData随机顺序

时间:2019-02-02 12:25:59

标签: java sql spring-boot spring-data

我有字符串“ AlphaBetaZeta GammaTheta”(MS SQL数据库中的表格字段),我需要使用spring-data进行搜索,这些数据具有很多相似性,并且关键字的随机顺序和随机计数

我正在尝试搜索:

findByLabelContaining(Collection<String> labels)
findByLabelLike(Collection<String> labels)

但是这些不起作用。

在数据库中启用全文搜索或使用弹性,我只能使用带有本机接口方法或自定义jpql查询的Spring-Data。

SELECT id, label
FROM TABLE10
WHERE label like '%gam%' AND
      label like '%alpha%' AND
      label LIKE '%theta%'

SELECT id, label
FROM TABLE10
WHERE label like '%alpha%' AND
      label like '%theta%'

还有更多..

1 个答案:

答案 0 :(得分:0)

使用自定义的本机查询:

@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();
}