Ormlite внутреннее соединение на трех столах - PullRequest
13 голосов
/ 04 сентября 2011

Я хочу создать внутреннее объединение для трех таблиц, таких как эта, например:

SELECT C.Description, D.ItemDescription
  FROM OrderDetailStatement AS D 
 INNER JOIN OrderHeaderStatement AS H 
    ON H.OrderHeaderStatementRefID = D.OrderHeaderStatementRefID 
 INNER JOIN customers AS C 
    ON H.CustomerRefID = C.CustomerRefID
 WHERE (D.MixedValue > 1000)

но я немного растерялся, не могли бы вы дать мне прохождение?

спасибо заранее

1 Ответ

36 голосов
/ 06 сентября 2011

ORMLite теперь поддерживает простые JOIN операторы .Вы можете сделать что-то вроде следующего:

// start the order header query
QueryBuilder<OrderHeader, Integer> orderHeaderQb = orderHeaderDao.queryBuilder();
QueryBuilder<Customer, Integer> customerQb = customerDao.queryBuilder();
// join with the order query
orderHeaderQb.join(customerQb);
// start the order statement query
QueryBuilder<OrderStatement, Integer> orderStatementQb =
    orderStatementDao.queryBuilder();
orderStatementQb.where().gt("mixedvalue", 100);
// join with the order-header query
orderStatementQb.join(orderHeaderQb);
List<OrderStatement> orderStatementQb.query();

Заметьте, однако, что вы можете получать сущности только из построителя запросов, используя этот механизм.Если вы хотите получить два поля описания из разных объектов, вам все равно придется использовать raw-запрос.

Существует поддержка "необработанных запросов", включая метод Dao.queryRaw()где вы можете использовать свой собственный SQL.Я подозреваю, что вы уже нашли их.Вот документы для необработанных запросов .

...