2012-08-25 69 views
0

我有2個表即圖書館和預訂從使用多個表中檢索數據冬眠

  • 在圖書館 - >蓋,L-NAME,laddress和Setbooks(蓋是主 鍵)
  • 在>印出價,BNAME,bauthor(出價主鍵)

即:圖書館 - 一對多 - >圖書 我發現在檢索圖書館小號有作者(bauthor)的書籍列表難度=「XYZ 」。

我嘗試此查詢:

query=session.createQuery("from Library as l where l.books.bauthor="xyz"); 

但得到錯誤:試圖非法提領收藏在Hibernate查詢列表

,當我用這個查詢:

query=session.createQuery("from Library as l inner join l.books b where b.bauthor="xyz"); 
List<Library>list=query.list(); 

我得到正確的沒有。的書,但是當我試圖檢索(Library l=list.get(0);or Library l=(Library)list.get(0))

我收到錯誤:java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.demo.Library

+0

你明白'ClassCastException'? –

+0

s但我如何將對象轉換爲庫對象? – nandu

+0

使用Object來代替,檢查list()返回的是什麼類型,調試它,獲取實際類型,然後類型轉換 –

回答

0

你得到圖書館和圖書類型列表,讓你可以只有一種類型的記錄

Query query = session.createSQLQuery(sql); 
      records = query.list(); 
      for (Object[] fields : records) { 
       Library view = new Library(); 
       view.setId(StringUtils.toString(fields[1])); 
       view.setLName(StringUtils.toString(fields[0])); 
       list.add(view); 
      } 
+0

這段代碼甚至不會編譯。 'StringUtils'導入? –

+0

感謝Mohammod,我已經改變了StringUtils.toString(fields [1])到字段[1] .toString()它的工作 – nandu

+0

永遠不要做這樣的事情,無論如何它是錯誤的順序。 –