Where
API 4.48中有一个关于使用where
子句的示例,其完全相同:
QueryBuilder<Account, String> qb = accountDao.queryBuilder();
Where where = qb.where();
// the name field must be equal to "foo"
where.eq(Account.NAME_FIELD_NAME, "foo");
// and
where.and();
// the password field must be equal to "_secret"
where.eq(Account.PASSWORD_FIELD_NAME, "_secret");
PreparedQuery<Account, String> preparedQuery = qb.prepareQuery();
但这对我(java.lang.IllegalStateException: No where clauses defined
)不起作用,除非我这样做:
qb.setWhere(where);
在准备查询之前。当API建议应该这样做时,内部where
对象看起来不会发生变异。
还有其他人经历过同样的事吗?
更新
看起来即使调用setWhere()
也无法正常工作。我以某种方式把它搞砸了。
答案 0 :(得分:1)
我发现了问题,这是我的错。在调试时,我多次在where()
对象上调用QueryBuilder
。但是,正如where
方法的文档所述:
public Where&lt; T,ID&gt;其中()
返回一个Where对象,该对象应该用于在语句中添加SQL where子句。这也将重置where对象,以便您可以使用具有不同where语句的相同查询构建器。
正在重置内部where
对象。