Вопрос по android, ormlite, java, query-builder – Как построить запрос с выбором по значению поля стороннего объекта

5

Каков наилучший способ запроса с использованием значения поля чужого объекта?

Предположим, у меня есть эти три класса.

Класс UnitResult, который описывает количество единиц:

@DatabaseTable
public class UnitResult {
    public static final String ID_FIELD_NAME = "id";
    public static final String UNIT_COLUMN_NAME = "unit";
    public static final String RESULT_COLUMN_NAME = "result";

    @DatabaseField(generatedId = true, columnName = ID_FIELD_NAME)
    public Integer id;

    @DatabaseField(foreign = true, canBeNull = false, columnName = UNIT_COLUMN_NAME)
    public Unit unit;

    @DatabaseField(canBeNull = true, columnName = RESULT_COLUMN_NAME)
    public Integer result = null;
}

Класс юнитов, который описывает определенные юниты на рынке (например, закуски, закуски и т. Д.):

@DatabaseTable
public class Unit {
    public static final String ID_FIELD_NAME = "id";
    public static final String TYPE_FIELD_NAME = "type";

    @DatabaseField(id = true, columnName = ID_FIELD_NAME)
    public int id;

    @DatabaseField(canBeNull = false, columnName = TYPE_FIELD_NAME)
    public UnitType type;
}

И Enum типа Unit:

public enum UnitType {
    JUICES,
    DRINKS,
    SNACKS,
    NPD;
}

Так как я могу запросить всеUnitResult гдеUnit типUnitType.JUICES?

Ваш Ответ

1   ответ
16

So how can I query all UnitResult where Unit type is UnitType.JUICES?

Способ сделать это вORMLite это использовать`Where.in (...) с подзапросом:

// setup our sub-query on the Unit table first
QueryBuilder<Unit,Integer> uQb = unitDao.queryBuilder();
uQb.where().eq(Unit.TYPE_FIELD_NAME, UnitType.JUICES);
// outer query on UnitResult table
QueryBuilder<UnitResult,Integer> urQb = unitResultDao.queryBuilder();
// in using the sub-query
urQb.where().in(UnitResult.UNIT_COLUMN_NAME, uQb);
List<UnitResult> results = urQb.query();
Продолжение: я полагаю, что вы собираетесь использовать соединение.
Это больше не похоже на работу. Поскольку столбец id автоматически добавляется в запрос, он выдает «SQLException», поэтому во внутреннем запросе должен быть указан только 1 столбец выбора вместо * ».
Большое спасибо, Грей! И уважение к библиотеке OrmLite! :) Yarovoy

Похожие вопросы