2012-11-18 56 views
0

我在adroid中使用ormlite。庫似乎是非常有用的,但我有一個與QueryBuilder的問題。我會試着解釋一下這個抽象的例子。 假設我們有4個表:項目,員工,國家,ActiveProject。單個項目可以有多個員工,但員工只能在一個項目上工作。員工來自一個國家。 ActiveProject表有一行表示當前活動的項目。QueryBuilder上的ormLite join()替換了以前的join()?

現在我想列出指定國家(「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」語句已經消失。

我在這裏做錯了什麼?

回答

3

不幸的是,在這個時候,ORMLite只支持單個其他表的JOIN。多表連接目前不受支持。隨意將一個項目添加到SourceForge站點的feature request部分。

如果您需要執行多表連接,那麼您可以使用raw query functionality,但您必須自己解釋結果。

+0

感謝您的回答!事實上,缺乏多表連接並不是一個很大的問題。在上面的例子中,我可以簡單地檢索「en」國家的ID,並在WHERE語句中使用它:(employeeQb.where().eq(Employee.COUNTRY_ID,enCountryId)。不過,我會嘗試添加多功能作爲圖書館真是太棒了 – Ramps

+2

我剛剛添加了代碼來支持這個@Ramps,它將在4.43。 – Gray

+0

太棒了!很高興知道。 – Ramps