我在adroid中使用ormlite。库似乎非常有用,但我有一个QueryBuilder的问题。我将尝试在一些抽象的例子中解释这一点。 假设我们有4个表:Projects,Employees,Countries,ActiveProject。单个项目可以有多个员工,但员工只能在一个项目上工作。员工来自一个国家。 ActiveProject表有一行表示当前活动的项目。
现在我要列出指定国家/地区(“en”)的所有员工,这些员工适用于当前活动的项目。
//retrieving Daos:
Dao<Projects, Long> projectDao = helper.getDao(Projects.class);
Dao<Employees, Long> employeeDao = helper.getDao(Employees.class);
Dao<Countries, Long> countryDao = helper.getDao(Countries.class);
Dao<ActiveProject, Long> activeProjectDao = helper.getDao(ActiveProject.class);
//retrieving QueryBuilder
projectQb = projectDao.queryBuilder();
employeeQb = employeeDao.queryBuilder();
countryQb = countryDao.queryBuilder();
activeProjectQb = activeProjectDao.queryBuilder();
//constructing query:
//add WHERE statement for country
countryQb.where().eq(Countries.NAME,"en");
employeeQb.join(countryQb);
//so far so good, when I query from employees here, I'll get all employees from "en"
//limit the results to active project only
projectQb.join(activeProjectQb);
//if I query the projectQb for all projects, I'll get only the active one - as expected.
//but here the problem starts
employeeQb.join(projectQb);
现在,employeeQb.query()将列出属于活动项目但来自所有国家/地区的所有员工。 “Employees-Country join”和“WHERE”语句已经消失。
我在这里做错了吗?
答案 0 :(得分:3)
不幸的是,此时,ORMLite仅支持具有单个其他表的JOIN。目前不支持多表连接。随意将项目添加到SourceForge站点的feature request部分。
如果你需要进行多表连接,那么你可以使用raw query functionality,但你必须自己解释结果。