2015-10-02 65 views
1

好吧,所以我仍然有點Java和休眠的新手,我試圖搜索一個問題/答案設置在我的數據庫中,我可以拉起來該設置就好,如果我輸入的確切問題,但是當我使用類似的運算符沒有任何作用,我真的不知道該怎麼做。我只是在尋找這個問題,而且它與答案是同一個對象的一部分,所以我也只是提出了答案。像運營商不工作,使用彈簧MVC和休眠

這是我在我的QuestionAnswerDao代碼

public QuestionAnswerSet getQuestionAnswerSetByQuestion(String question) 
{ 
    Session session = (Session) em.getDelegate(); 

    return (QuestionAnswerSet) session.createCriteria(QuestionAnswerSet.class).add(Restrictions.eq("question", "%"+question+"%")).uniqueResult(); 
} 

而且這是我在我的控制器

@RequestMapping(value="search", method=RequestMethod.GET) 
public String searchGet (ModelMap model, HttpServletRequest request) 
{ 
    SearchForm searchForm = new SearchForm(); 

    model.put("searchForm", searchForm); 
    return "app/search"; 
} 

@RequestMapping(value="search", method=RequestMethod.POST) 
public String searchPost (@ModelAttribute("searchForm") SearchForm searchForm, ModelMap model, HttpServletRequest request) 
{ 
    QuestionAnswerSet questionAnswerSetByQuestion = questionAnswerDao.getQuestionAnswerSetByQuestion(searchForm.getSearchString()); 
    model.put("searchResult", questionAnswerSetByQuestion); 

    return "app/search"; 
} 

代碼如果有人可以幫助我這個這將是巨大的,謝謝。

回答

0

我沒有在您的示例中看到「like」,但我認爲您只需更改 Restrictions.eq ro限制。

因此,如果使用Hibernate 4.3這將是這種方法:

https://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/criterion/Restrictions.html#like(java.lang.String,java.lang.Object中)

我覺得有點令人擔憂的是「uniqueResult」後,如果您使用通配符搜索我總會認爲可能會有更多的結果。如果有uniqueResult方法可能會拋出一個異常。

此外它總是有助於在Hibernate配置中啓用「show_sql」來查看Hibernate在開發過程中生成的實際SQL。

+1

謝謝,這很好。我只是將我的代碼更改爲Restrictions.like。你也是正確的關於拋出異常的「uniqueResult」。我拿出了「uniqueResult」代碼,現在我找不到任何作品。你有什麼建議嗎?這是我的代碼現在看起來像'return(QuestionAnswerSet)session.createCriteria(QuestionAnswerSet.class).add(Restrictions.like(「question」,「%」+ question +「%」));' – dochsner

+0

其實這是一個問題我的jsp我想,我沒有交流:forEach循環 – dochsner

+0

是的,你需要說「forList()」,然後處理返回類型作爲列表類型。最後,您可以檢查列表中是否有多個零件,然後只返回最後一個(如果您確定它將是您想要的零件)。 –