gpt4 book ai didi

java - 如何使用一组可变的字符串进行类似查询?

转载 作者:行者123 更新时间:2023-12-02 02:13:29 25 4
gpt4 key购买 nike

我正在尝试使用可变字符串集执行“类似查询”,以便在单个查询中检索所有内容包含一组单词的文本,即:

 public long countByTextLike(Set<String> strings) {
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root<Example> root = query.from(Example.class);


query.select(builder.count(root.get("id"))).where(
builder.and(
builder.equal(root.get("lang"), "EN")
)
);

//this does not work
for (String word : strings) {
query.where(builder.or(builder.like(root.get("text"), word)));
}

return manager.createQuery(query).getSingleResult();

}

不幸的是,这不起作用,因为每个循环中的 where 都会被覆盖。仅使用循环的最后一个字,并且“AND”限制被覆盖。如何使用可变数量的字符串执行“类似查询”?这不可能吗?

我正在使用 spring 框架,但我认为这个问题可以扩展到 hibernate

最佳答案

您可以使用谓词,然后仅使用一个 where 子句将它们全部添加

public long countByTextLike(Set<String> strings) {
CriteriaBuilder builder = currentSession().getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root<Example> root = query.from(Example.class);

Predicate[] predicates = new Predicate[strings.size()];

query.select(builder.count(root.get("id")));

Predicate langPredicate = builder.equal(root.get("lang"), "EN");

int cont = 0;
for (String word : strings) {
Predicate pred = builder.like(root.get("text"), "%" + word + "%");
predicates[cont++] = pred;
}

Predicate orPredicate = builder.or(predicates);

Predicate finalPredicate = builder.and(orPredicate, langPredicate);

return manager.createQuery(query).where(finalPredicate).getSingleResult();

}

关于java - 如何使用一组可变的字符串进行类似查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49615570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com