Внутреннее соединение Ormlite на трех столах

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

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)

но я немного запутался, не могли бы вы дать мне пошаговое руководство?

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


person Antonis    schedule 04.09.2011    source источник
comment
пожалуйста, напишите, какую ошибку вы получаете?   -  person Vishwanath Dalvi    schedule 04.09.2011
comment
Я только что попробовал с чистым sql, потому что до сих пор не понимаю, как написать запрос с помощью ormlite ormlite. Мне просто нужен пример. Любой пример, включающий 3 таблицы.   -  person Antonis    schedule 05.09.2011
comment
Обратите внимание, что мы добавляем базовую поддержку JOIN в 4.42 @Antonis. Я обновил свой ответ.   -  person Gray    schedule 20.09.2012


Ответы (1)


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();

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

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

person Gray    schedule 06.09.2011
comment
ormlite.com/javadoc/ormlite-core/ doc-файлы/ - person LuminiousAndroid; 27.10.2014
comment
От @haddr: На данный момент, если вам нужны полностью гидратированные объекты из других таблиц, вы можете использовать foreignAutoRefresh в аннотации @DatabaseField для внешних ключей. При этом при запросе все внешние объекты будут получать свои поля. - person Gray; 23.01.2016
comment
@GrayGray, как мы можем выполнить необработанный запрос, возвращающий поля из разных объектов? Пытаюсь где-то найти ответ, но не могу... - person rmpt; 28.09.2016