ebean和手动输入的SQL查询之间的不同结果?
问题描述:
我已经建立了一个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的配置之间的差异,但我看不到哪一个!
答
的信息,这个问题是从这一行来:
query.setParameter("poles", StringUtils.join(poleIds.toArray(), ","));
相反,我只是把它替换到这一点:
// poleids is a List<Long>
query.setParameter("poles", poleIds);
所有的一切都工作得很好:)