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();