2013-05-06 20 views
0

我已經建立了一個MySQL查詢,當我通過phpMyAdmin的嘗試,返回452項,這裏的查詢:ebean和手動輸入的SQL查詢之間的不同結果?

SELECT csp.id FROM child_subscription_prices csp 
JOIN child_moments cm ON csp.child_moment_id = cm.id 
JOIN moments m ON cm.moment_id = m.id 
JOIN poles p ON m.pole_id = p.id 
JOIN persons pr ON pr.id = csp.payer_id 
WHERE cm.day BETWEEN '2013-1-15' AND '2013-1-17' AND p.type_id IN (1,2,3) AND csp.center_id = 1 
ORDER BY pr.lastname ASC 

但是,當我把它用Ebean(播放框架2.1.1!),就像這樣:

SimpleDateFormat format = new SimpleDateFormat("y-M-d"); 
StringBuilder querySql = new StringBuilder(); 
querySql.append("SELECT csp.id FROM child_subscription_prices csp "); 
querySql.append("JOIN child_moments cm ON csp.child_moment_id = cm.id "); 
querySql.append("JOIN moments m ON cm.moment_id = m.id "); 
querySql.append("JOIN poles p ON m.pole_id = p.id "); 
querySql.append("JOIN persons pr ON pr.id = csp.payer_id "); 
querySql.append("WHERE cm.day BETWEEN :start AND :end AND p.type_id IN (:poles) AND csp.center_id = :center "); 
querySql.append("ORDER BY pr.lastname ASC;");  

SqlQuery query = Ebean.createSqlQuery(querySql.toString()); 
query.setParameter("start", format.format(start)); 
query.setParameter("end", format.format(end)); 
query.setParameter("poles", StringUtils.join(poleIds.toArray(), ",")); 
query.setParameter("center", Session.getCenter().getId()); 

List<SqlRow> rows = query.findList(); 
rows.size(); // Return 409 !! 

當然,我測試了Java中的參數並將它們進行比較,它們是相同的! (我甚至更新了我的第一個查詢以匹配日期(2013-01-15 => 2013-1-15,像Java中製作的那樣!

我沒有任何線索爲什麼我有50個條目少使用Java,是有什麼特別的Ebean的配置,並不遵循一些相關的數據庫以任何理由,或像這樣可以解釋的差異

感謝您的幫助

更新:?!我也嘗試過來計算從Java中進行的SQL查詢的結果數:

querySql.append("SELECT COUNT(csp.id) as total FROM child_subscription_prices csp "); 
// ... 

query.findUnique().getLong("total"); // Also 409 ! 

所以它顯然是PhpMyAdmin和EBean的配置之間的差異,但我看不到哪一個!

回答

0

的信息,這個問題是從這一行來:

query.setParameter("poles", StringUtils.join(poleIds.toArray(), ",")); 

相反,我只是把它替換到這一點:

// poleids is a List<Long> 
query.setParameter("poles", poleIds); 

所有的一切都工作得很好:)