2012-01-31 106 views
1

我試圖在休眠中編寫搜索查詢。我從開放源代碼中獲得幫助。 所以我的查詢:如何在休眠中編寫搜索查詢

public User getAllUser(String search) { 
    String[] searchItems = search.split(" "); 
    try { 
     String sqlQuery = "SELECT * FROM USER u " + "WHERE u.deleted = 1 "; 
     sqlQuery += "AND ("; 
     for (int i = 0; i < searchItems.length; i++) { 
      if (i != 0) { 
       sqlQuery += " OR "; 
      } 
      sqlQuery += "(" + "lower(u.last_name) LIKE '" 
        + StringUtils.lowerCase("%" + searchItems[i] + "%") 
        + "' " + "OR lower(u.first_name) LIKE '" 
        + StringUtils.lowerCase("%" + searchItems[i] + "%") 
        + "' " + "OR lower(u.username) LIKE '" 
        + StringUtils.lowerCase("%" + searchItems[i] + "%") 
        + "' " + ") "; 
     } 
     sqlQuery += ")"; 

     log.debug("sqlQuery : " + sqlQuery); 
     Query query = sessionFactory.getCurrentSession().createQuery(
       sqlQuery); 

     return (User) query.list().get(0); 

    } catch (HibernateException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

它說,有一個意外的道理,我,但我沒有發現它在哪裏。

所以我有兩個問題:

  1. 如何使它發揮作用。
  2. 如何使用標準和投影/限制休眠
+1

關於閱讀的文檔和javadoc的如何? http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#querycriteria – 2012-01-31 13:23:54

+0

您是否每次都會收到此錯誤,或者是否與特定的搜索字符串發生關聯?你能給出一個導致錯誤的SQL輸出的例子嗎? – Digbyswift 2012-01-31 13:31:18

+0

嗨@perissf我沒有明白... – rokonoid 2012-01-31 13:48:40

回答

1

這寫的搜索查詢是不是一個Hibernate查詢。這是一個本地SQl。你應該使用下面的createSQLQuery

Query query = sessionFactory.getCurrentSession().createSqlQuery(
       sqlQuery); 

請參考this選擇使用休眠。

另外,我建議你去與Criterias

+0

謝謝@hop。 – rokonoid 2012-01-31 13:46:18

0

這一切看起來非常複雜和凌亂。你有沒有考慮過使用Hibernate Search呢?它旨在使查詢變得如此簡單。

+0

我想使用hibernate搜索,但hibernate搜索是全文搜索的設計,到目前爲止我知道..現在我不需要全文搜索。 – rokonoid 2012-01-31 17:31:31

+0

這很公平。我只是評論說你在代碼中要做的是Hibernate Search的設計目的。 – 2012-01-31 17:33:34

2

您可以使用:

Query query = sessionFactory.getCurrentSession().createQuery("from OdontogramaDiagnosticoModel where odontologia=:idOdontologia order by idOdontogramaDiagnostico DESC"); query.setParameter("idOdontologia", "102"); return query.list()

sessionFactory.getCurrentSession().createCriteria(OdontologiaDiagnostico.class).add(Restrictions.eq("diagnosticosClinicos", "test"));