多对多选择查询,其中一列有多个值

时间:2018-08-06 08:56:42

标签: sql hibernate spring-boot jpa jpql

我有很多关系

    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 

这确实可以检索图像,但也可以检索只有一个关键字的图像。我只需要具有全部个关键字

的图片

我的查询出了什么问题?

0 个答案:

没有答案