0

次のコードはエラーになります

List<List<Consumption>> children = new ArrayList<List<Consumption>>();
try {
    for(DrinkType drinkType : groups){
        QueryBuilder<Consumption, ?> qb = getHelper()
                .getConsumptionDao().queryBuilder();
        qb.groupBy(Consumption.COLUMN_DRINK_ID).having("MIN("+Consumption.COLUMN_PRICE+")").orderBy(Consumption.COLUMN_PRICE, true);
        QueryBuilder<Drink, Integer> qb2 = getHelper().getDrinkDao().queryBuilder();
        qb2.where().eq(Drink.COLUMN_DRINKTYPE, drinkType.getFlag());
        qb.join(qb2);
        Log.d("Query", qb.prepareStatementString());
        children.add(qb.query());   
    }

} catch (SQLException e) {
    e.printStackTrace();
}

QueryBuilder は、HAVING 句を ORDER BY 句の前ではなく後ろに配置しているようです。

java.sql.SQLException: Problems executing Android query: 
SELECT `consumption`.* FROM `consumption` INNER JOIN `drink` ON
 `consumption`.`drink_id` = `drink`.`_id` WHERE `drink`.`drink_type` = 'P'
 GROUP BY `consumption`.`drink_id` ORDER BY `consumption`.`price` HAVING MIN(price) 

代わりに生のクエリを実行してこれを回避しようとしましたが、次のクエリを使用すると

SELECT co.* FROM consumption co INNER JOIN drink dr ON dr._id = co.drink_id
 WHERE dr.drink_type = 'P' GROUP BY co.drink_id HAVING MIN(price) ORDER BY price

これは、SQLite Manager を使用して sqlite データベースで直接同じクエリを実行した場合とは異なる結果を返します。同じクエリで HAVING と ORDER BY の両方を使用すると、ORMlite に問題が発生する可能性があると思います。

このクエリを機能させるための回避策はありますか?

4

0 に答える 0