我尝试在循环中运行jpa select查询并添加其'结果列表。但是我得到了空。
这就是我所做的:
String[] splittedTag = tagName.split("\\s+");
String getTags;
Query query;
for(String tag : splittedTag)
{
getTags = "select distinct f.tagname from Filemetadata f where f.tagname LIKE '%"+tag+"%'";
query = entityManager.createQuery(getTags);
list.addAll(query.getResultList());
}
稍后我使用模式根据splitted标签过滤我的结果,当结果与所有splitted标签匹配时,我将该结果添加到jsonArrayBuilder并将其返回给调用方法。
Pattern pattern = Pattern.compile(stringPattern,Pattern.CASE_INSENSITIVE);
for(int i = 0; i < list.size(); i++){
if (pattern.matcher((CharSequence) list.get(i)).find())
{
jsonArrayBuilder.add(list.get(i));
}
}
return jsonArrayBuilder;
查询是否以正确的方式使用?是否有可能以这种方式使用?帮助我想一想,非常感谢您的帮助,并提前感谢您。
答案 0 :(得分:0)
查询是普通的SQL查询,而不是HQL查询,因此,您必须调用:
query = entityManager.createSQLQuery(getTags);
而不是:
query = entityManager.createQuery(getTags);
另一种类型,对于性能,尝试不做很多查询。在您的代码中,如果列表包含1.000个标记,则您将对数据库执行1.000次调用。尝试将100/200标记组分组以减少数据库调用。