Hibernate参数化查询

Hibernate参数化查询,hibernate,hql,Hibernate,Hql,我有以下方法: public List<Book> searchGroups(String title, String subtitle, String author) { Session session = HibernateUtil.getCurrentSession(); Query query = session.createSQLQuery("SELECT * FROM book GROUP BY title, subtitle, author;").add

我有以下方法:

public List<Book> searchGroups(String title, String subtitle, String author) {
    Session session = HibernateUtil.getCurrentSession();
    Query query = session.createSQLQuery("SELECT * FROM book GROUP BY title, subtitle, author;").addEntity(Book.class);
    return query.list();
}
公共列表搜索组(字符串标题、字符串字幕、字符串作者){
Session Session=HibernateUtil.getCurrentSession();
Query Query=session.createSQLQuery(“按标题、副标题、作者从图书组中选择*”).addEntity(book.class);
返回query.list();
}
我想包括标题、副标题和作者作为搜索参数,但只有当它们不为空时。我该怎么做?例如,如果subtitle和author为null,我只希望按作者搜索。

使用,它正是为了以动态方式构造查询而设计的:

Criteria c = session.createCriteria(Book.class, "book");
if (title != null) {
    c.add(Restrictions.eq("book.title", title);
}
if (subtitle != null) {
    c.add(Restrictions.eq("book.subtitle", subtitle);
}
if (author != null) {
    c.add(Restrictions.eq("book.author", author);
}
List<Book> books = c.list();

我知道标准,但我只需要得到明确的结果。例如,我有三本书:两本书名、副标题、作者相同,第三本书名、副标题相同,但作者不同。我需要前两本书只显示为一个条目。然后您不能返回
列表
,因为一本书的ID使其与所有其他书不同。向查询中添加一个独特的投影和三个属性投影。编辑来了。
c.setProjection(Projections.distinct(
    Projections.projectionList()
        .add(Projections.property("book.title"))
        .add(Projections.property("book.subtitle"))
        .add(Projections.property("book.author"))));
List<Object[]> result = c.list();