2013-03-03 87 views
1

準則用於從數據庫檢索數據。它完美地生成SQL查詢,分別在mySql上進行測試,記錄加載正確;
但是,使用Criterial.list()時,它給了我一個空的列表。準則會正確生成SQL查詢,但不會返回任何內容

我檢查了我的數據庫連接,它們都是正確的。會導致這個問題的是什麼?


修訂
這裏是我的代碼:

accCr = DetachedCriteria.forClass(TSESpotInvestorAccount.class, "acc"); 
accCr.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY); 
accCr.add(Restrictions.eq("exchangeDepositNo", filter.getBc())); 
accCr.setProjection(Projections.id()); 
List accIds = getHibernateTemplate().findByCriteria(accCr); 
+0

是的,代碼是必要的。 – 2013-03-03 08:50:35

+0

剛剛更新了答案。 – 2013-03-03 08:54:21

回答

0

您的代碼並沒有太大的意義:

accCr.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY); 

上面一行說,查詢應該返回實體(有潛在的聯合實體),並且Hibernate應該只返回不同的實體

accCr.setProjection(Projections.id()); 

上面的行表示查詢只能返回一個標量列:根實體的ID。

如果你想要的是一個ID列表,那麼不要設置不同的根實體結果轉換器。

+0

是的,我知道。它根本沒有任何意義。感謝您的提示,我會記住這一點。但問題不在於此。 – 2013-03-03 09:06:43

+0

然後或者查詢實際返回一些東西,或者你沒有查詢你想的數據庫,或者你沒有在MySQL中提交數據,或者'filter.getBc()'返回的值不是你認爲的那個是。嘗試刪除此標準,然後打印它包含的內容。注意多餘的空格或其他不可見的字符。 – 2013-03-03 09:10:55

+0

感謝您的幫助,看起來'filter.getBc()'末尾有一些額外的字符,導致了這個問題。不過,我學到了一個關於DISTINCT_ROOT_ENTITY的好教訓。 – 2013-03-03 12:56:13

相關問題