如何通过选择异物字段的值来构建查询

Yar*_*voy 5 java android query-builder ormlite

使用外来对象字段的值查询的最佳方法是什么?

假设我有这三个类.

描述单位数量的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;
}
Run Code Online (Sandbox Code Playgroud)

描述市场中某些单位的单位类(例如jiuce,snack等):

@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;
}
Run Code Online (Sandbox Code Playgroud)

和单位类型的枚举:

public enum UnitType {
    JUICES,
    DRINKS,
    SNACKS,
    NPD;
}
Run Code Online (Sandbox Code Playgroud)

那么,如何可以查询所有UnitResult地方Unit的类型是UnitType.JUICES

Gra*_*ray 16

那么如何查询所有UnitResult,其中Unit类型是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();
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,格雷!并尊重OrmLite库!:) (3认同)
  • 这似乎不再起作用.因为id列会自动添加到查询中,所以它会抛出"SQLException,内部查询必须只指定1个选择列而不是*". (2认同)