如何将hibernate join查询转换为ormlite查询

时间:2015-07-21 10:22:32

标签: android android-sqlite ormlite

我有一个hibernate查询,它根据某些条件使用其模型类从两个表中选择特定数据。现在我想将该查询转换为ORMLite查询以在我的Android应用程序中使用,但我不知道如何在ORMLite中使用queryBuilder(),因为我是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);

以下是付款和帐户类的getter方法。

dbHelper.getPaymentDao() and dbHelper.getAccountDao()

1 个答案:

答案 0 :(得分:2)

  

我有一个hibernate查询,它根据某些条件使用其模型类从两个表中选择特定数据。现在我想将该查询转换为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