简体   繁体   English

HQL查询存在于列表元素之间

[英]HQL query where exists or between list elements

I have a Tag class like this: 我有这样的Tag类:

public class Tag {

    private Long id;

    private String title;
    private Set<Document> documents = new HashSet<Document>();

    public Tag(){}

//getter and setter...

}

And a class Document clasified by some tags object 并且一个类文档被一些标签对象分类

public class Document {

    private Long id;

    private String title;
    private Int numberPages;
    private Set<Tag> tags = new HashSet<Tag>();

    public Document(){}

//getter and setter...

}

And now I would like get documents with a 10 pages maximun and they have tags "short" OR "essay" 现在我想获得10页最大的文件,他们有“短”或“论文”的标签

I guess something like: 我猜是这样的:

int nPages = 10;
Query query = session.createQuery("from Document where nPages <= :numberPages and (<<short>> OR <<essay>>);  
query.setInteger("numberPages", nPages);  

The list of tags could be variable. 标签列表可以是变量。 And I would like differentiate when have to be all tags ("AND" between tags) or with any tag is enough ("OR" between tags) 我想区分何时必须是所有标签(标签之间的“AND”)或任何标签就足够了(标签之间的“OR”)

How can I build the sql statement? 如何构建sql语句?

I think your HQL should look like below: 我认为您的HQL应如下所示:

  Query query = session.createQuery(
           "from Document d join d.tags t "+
           " where d.nPages <= :numberPages and "+
              " t.title in (:titles) "; 
  List<String> titles = new ArrayList<String>();
  titles.add("short");
  titles.add("essay");
  query.setParameter("numberPages", nPages);  
  query.setParameterList("titles", titles);  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM