在循环内执行jpa查询给出null

时间:2018-03-05 11:43:27

标签: java sql jpa

我尝试在循环中运行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; 

查询是否以正确的方式使用?是否有可能以这种方式使用?帮助我想一想,非常感谢您的帮助,并提前感谢您。

1 个答案:

答案 0 :(得分:0)

查询是普通的SQL查询,而不是HQL查询,因此,您必须调用:

query = entityManager.createSQLQuery(getTags);

而不是:

query = entityManager.createQuery(getTags);

另一种类型,对于性能,尝试不做很多查询。在您的代码中,如果列表包含1.000个标记,则您将对数据库执行1.000次调用。尝试将100/200标记组分组以减少数据库调用。