ORMLITE - Запрос иностранной области
Вопрос
Использование ORMLITE для Android, мне необходимо создать запрос, который возвращает заказы по идентификатору заказа или по имени клиента.Пожалуйста, рассмотрите следующие объявления класса:
@DatabaseTable(tableName = "order")
public class Order {
@DatabaseField(generatedId = true)
private Long id;
@DatabaseField(foreign = true, canBeNull = false, foreignAutoRefresh = true, columnName = "customer_id")
private Customer customer;
// default constructor, getters and setters...
}
@DatabaseTable(tableName = "customer")
public class Customer {
@DatabaseField(generatedId = true)
private Long id;
@DatabaseField
private String name;
// default constructor, getters and setters...
}
.
RAW SQL Я ищу бы что-то подобное:
SELECT
o.*
FROM
order o
JOIN customer c on
o.customer_id = c.id
WHERE
(o.id = ?) OR (c.name = ?)
.
Какой лучший способ сделать это с помощью Ormlite?
Решение
ormlite теперь поддерживает Простые запросы присоединения .
Так что ваш запрос будет выглядеть что-то вроде:
QueryBuilder<Customer, Integer> customerQb = customerDao.queryBuilder();
SelectArg nameSelectArg = new SelectArg();
// this gives the c.name = ?
customerQb.where().eq("name", nameSelectArg);
QueryBuilder<Account, Integer> orderQb = orderDao.queryBuilder();
SelectArg idSelectArg = new SelectArg();
// this gives the o.id = ?
orderQb.where().eq("id", idSelectArg);
orderQb.join(customerQb);
// then you set the args and run the query
nameSelectArg.setValue("jim");
idSelectArg.setValue(1);
List<Order> results = orderQb.join(customerQb).query();
. Другие советы
Нет, присоединения поддерживаются в Ormlite https://stackoleflow.com/a/7320091/323128 Тем не менее, Эта ссылка даст видение, как завершить свою задачу
Не связан с StackOverflow