And*_*ega 4 java android foreign-keys sql-order-by ormlite
如何在ORMLite中构建一个查询,以便我可以使用orderBy函数(使用带有原始字符串或参数化函数的函数)引用与我正在构建查询的dao不同的实体的属性. ?我的查询是这样构建的:
// Inner query for performances
QueryBuilder<Performance, String> performancesQB = performanceDao.queryBuilder();
performancesQB.selectColumns("performance_id");
SelectArg performanceSelectArg = new SelectArg();
performancesQB.where().lt("date", performanceSelectArg);
// Outer query for Order objects, where the id matches in the performance_id
// from the inner query
QueryBuilder<Order, String> ordersQB = orderDao.queryBuilder();
ordersQB.where().isNull("user_id").and().in("performance_id", performancesQB);
ordersQB.orderByRaw("performances.date DESC");
pastOrdersQuery = ordersQB.prepare();
Run Code Online (Sandbox Code Playgroud)
每当我尝试执行此查询时,我得到的异常是:
android.database.sqlite.SQLiteException: no such column: performances.date:,
while compiling: SELECT * FROM `orders` WHERE
(`user_id` IS NULL AND `performance_id` IN
(SELECT `performance_id` FROM `performances` WHERE `date` < ? ) )
ORDER BY performances.date DESC
Run Code Online (Sandbox Code Playgroud)
我在这里看到的唯一解决方案是使用JOIN而不是嵌套选择自己编写原始查询.愿这是一个很好的解决方案吗?
ORMLite现在支持简单的JOIN查询.这里有关于这个主题的文档:
所以你的查询现在看起来像:
QueryBuilder<Performance, String> performancesQB = performanceDao.queryBuilder();
SelectArg performanceSelectArg = new SelectArg();
performancesQB.where().lt("date", performanceSelectArg);
performancesQB.orderBy("date", false);
// query for Order objects, where the id matches
QueryBuilder<Order, String> ordersQB = orderDao.queryBuilder();
ordersQB.join(performancesQB).where().isNull("user_id");
pastOrdersQuery = ordersQB.prepare();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |