如何在hibernate中使用“或”来通过表字段进行关键字搜索

时间:2012-11-05 20:16:17

标签: hibernate hibernate-search

我希望使用Hibernate在关键字的任何字段(author_name,book_title,description,publisher name)上搜索我的表(book)。

我尝试使用下面的代码,但我的代码只适用于两个字段:

新的更新代码但是这里“createDisjunction()”不支持。显示错误 - >对于类型限制,方法create disjunction未定义

           import org.hibernate.Criteria;
           import org.hibernate.HibernateException;
           import org.hibernate.Query;
           import org.hibernate.Session;
           import org.hibernate.SessionFactory; 
           import org.hibernate.criterion.Restrictions;
            ............
           ............
           qry.add(Restrictions.createDisjunction()
           //But this 'createDisjunction()'  is showing error              
          //error as:the method create disjunction is undefined for the type restrictions

    .add(Restrictions.eq("authLastname",   keywordsearch ))
    .add(Restrictions.eq("bookTitile", keywordsearch  ))
    .add(Restrictions.eq("description",   keywordsearch  )) 
                     ); 

我也试过this tutorial来理解,但我无法解决我的问题。

2 个答案:

答案 0 :(得分:2)

Criteria cr = session.createCriteria(Book.class);
cr.add(Restrictions.disjunction().add(Restrictions.eq("author_name", keyword))
                                 .add(Restrictions.eq("book_title", keyword))
                                 .add(Restrictions.eq("description", keyword))
                                 .add(Restrictions.eq("publisher_name", keyword)));

您还应该尊重Java命名约定。 author_name应为authorNamebook_title应为bookTitle等。

答案 1 :(得分:0)

对于Hibernate Search,它看起来像:

Query luceneQuery = mythQB
    .keyword()
    .onFields("authLastname","bookTitile","description")
    .matching(keywordsearch)
    .createQuery();

这只是查询的一部分。您需要启用Hibernate Search并添加正确的注释等。它都在documentation中。从入门部分开始。它应该包含你需要的一切。