2015-07-21 102 views
0

我有一個hibernate查詢,它使用基於特定條件的模型類從兩個表中選擇特定數據。現在我想將該查詢轉換爲ORMLite查詢以在我的android應用程序中使用,但我不知道如何在ORMLite中使用queryBuilder(),因爲我是ORMLite中的初學者。如何將hibernate連接查詢轉換爲ormlite查詢

Query query = getCurrentSession().createQuery(
    "SELECT A.accountID,A.name,B.allowTransactions from Payments A,Accounts B " 
    + "WHERE A.accountID=B.id AND B.id NOT IN (5,55,602) AND A.active=1 AND " 
    + "B.parentID=:pID AND B.date BETWEEN :sDate AND :eDate GROUP BY A.id " 
    + "ORDER BY CASE WHEN A.name=:name THEN 1 ELSE 0 END,A.name"); 
query.setParameter("pID",4); 
query.setParameter("name", "Others"); 
query.setParameter("sDate",startDate); 
query.setParameter("eDate", endDate); 

以下是Payments和Accounts類的getter方法。

dbHelper.getPaymentDao() and dbHelper.getAccountDao() 
+0

看起來像沒有一個熟悉ORMLite ... – KJEjava48

回答

2

我有一個休眠查詢中使用基於某些條件其模型類,其選擇從兩個表的特定數據。現在我想將該查詢轉換爲ORMLite查詢...

由於其複雜性,ORMLite的QueryBuilder不支持此查詢。您當然可以使用dao.queryRaw(...) method,然後親自處理結果。

GenericRawResults<String[]> results = paymentDao.queryRaw(
    "SELECT A.accountID,A.name,B.allowTransactions from Payments A,Accounts B " 
    + "WHERE A.accountID=B.id AND B.id NOT IN (5,55,602) AND A.active=1 AND " 
    + "B.parentID=? AND B.date BETWEEN ? AND ? GROUP BY A.id " 
    + "ORDER BY CASE WHEN A.name = ? THEN 1 ELSE 0 END,A.name", 
    parentId, fromDate, toDate, name); 

請注意,我已將:args轉換爲?參數。

返回String結果,但您也可以使用其他Dao.queryRaw(...)方法將結果正確地轉換爲Java實體。

請參見:http://ormlite.com/docs/raw-queries

+0

是否有需要queryRaw()函數的任何庫? – KJEjava48

+0

我不理解那個問題@KJEjava48。 'queryRaw(...)'是DAO上的一個方法。 – Gray

+0

這裏既帳戶和支付表使用,所以我需要使用哪個dao類?我如何才能通過使用paymentDao得到所選字段? – KJEjava48