2011-11-08 167 views
0

我正在使用休眠模板。 從控制器我打電話像下面DAO方法:刪除結果集中的重複行

List<SearchQuestionnaire> lst = 
      questionnaireDAO.listQuestionnaire(searchQuestionnaire); 

在DAO我得到的結果集象下面這樣:

String queryString1 = "select 
    new com.apple.ist.cm.ruleadmin.model.SearchQuestionnaire 
     (qc.questionCategoryID, 
     qc.questionCategoryName, 
     qn.questionReferenceString, 
     qn.question, 
     qao.answerOptionGroupID, 
     aog.answerOptionGroup, 
     ans.answerStringValue) " 
     + "from Questionnaire qn, 
       QuestionCategory qc, 
       QuestionAnswerOption qao, 
       AnswerOptionGroup aog, 
       AnswerString ans " 
     + "where 
      qn.questionCategoryID = qc.questionCategoryID 
     and qn.questionID=qao.questionID 
     and qao.answerOptionGroupID=aog.answerOptionGroupID 
     and qao.answerStringID=ans.answerStringID"; 

query1 = (List<SearchQuestionnaire>) hibernateTemplate.find(queryString1); 

現在從QUERY1,我得到的結果設置如下圖所示:

A | B | C | D 
    -----|----|----|----- 
    a1 | b1 | c1 | d1 
    a1 | b1 | c1 | d2 
    a1 | b1 | c1 | d3 
    a2 | b2 | c2 | d4 
    a2 | b2 | c2 | d5 

現在,在JSP,我想在一行中顯示A,B,C,d,但A,B和C值的所有值,並在擴大該行d值應顯示如下圖所示:

a1 | b1 | c1  
    ------------- 
    d1 
    d2 
    d3 

    a2 | b2 | c2  
    ------------- 
    d4 
    d5 

現在我面臨着在列A,B和C

請以上建議刪除重複值的問題。這裏請考慮A,B,C和D是「queryString1」select子句的值。

回答

1

創建類ABC,含A,B和C.使它不可改變和實施hashCodeequals,使得具有用於A,B和C具有相同的值ABC的兩個實例有相同的hashCode和相等的其他。

然後,建立一個Map<ABC, List<D>>存儲所有由他們的ABC元組索引的Ds。迭代地圖的條目。每個條目將導致一個新的ABC部分。對於每個條目,遍歷其Ds列表。每個元素將導致該部分中的新行。

請注意,您的HQL查詢顯示您沒有按照它們應該映射實體之間的關聯。您幾乎不應該在兩個實體之間創建連接,如下所示:QuestionAnswerOption應該與其問題具有直接關聯(ManyToOne關聯),而不是持有其問題的ID。

+0

我沒有創建實體之間的任何關係,因爲它導致了一些其他問題。因此,我正在使用HQL與「新」。用我的方法是否有任何解決方案來刪除顯示的重複條目?在這裏,我可以去調用兩個查詢 - 一個用A,B和C,其次用A,B,C和D通過AJAX單擊展開按鈕。但它會成爲DB的兩個呼叫。 – Chandu

+0

您的示例中沒有任何重複條目:所有返回的行都不相同。按照我在答案中解釋的結果處理結果。 –