0

phpMyAdmin 経由で試すと 452 エントリを返す MySQL クエリを作成しました。クエリは次のとおりです。

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 (Play!Framework 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 で作成されたものと同じように!

Java を使用して 50 個のエントリが少ない理由がわかりません。何らかの理由で関連するデータベースに従わない特定の Ebean 構成がありますか、または違いを説明するこのようなものがありますか?

アップデート

また、Java で作成された SQL クエリからの結果の数を数えようとしました。

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

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

つまり、明らかに PhpMyAdmin と EBean の構成の違いのように見えますが、どちらが正しいかわかりません!

4

1 に答える 1

0

詳細については、問題は次の行から発生していました。

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

代わりに、これを次のように置き換える必要がありました。

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

そして、すべてがうまくいきました:)

于 2013-05-07T08:30:13.703 に答える