我有很多关系
table: images
id imageName keywords
table: imagesKeywords
imageId keywordId
table: keywords
id keywordName descr images
每个图像都有一些关键字,不同的图像可以具有相同的关键字。
我需要搜索图像,它们具有特定的keywordName
。
查询:
StringBuilder query = new StringBuilder();
query.append("select i.id, i.imageThumpPath, i.imageWatermarkPath from Image i join i.keywords k where ");
List<String> criteria = new ArrayList<>();
for (String key : keywordEn) {
criteria.add("k.keywordEn = '"+ key+"'");
}
for (int i = 0; i < criteria.size(); i++) {
if (i > 0) {
query.append(" and ");
}
query.append(criteria.get(i));
}
Query q = em.createQuery(query.toString());
return (List<Image>) q.getResultList();
当搜索参数仅为1个关键字时,查询将返回所需的图像,但是当添加2个或3个关键字时,结果为空。
带有查询:
select i from Image i join i.keywords k where k.keywordEn in :keywords
这确实可以检索图像,但也可以检索只有一个关键字的图像。我只需要具有全部个关键字
的图片我的查询出了什么问题?