使用外来对象字段的值查询的最佳方法是什么?
假设我有这三个类。
描述单位数量的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;
}
描述市场中某些单位的单位类(例如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;
}
单位类型的枚举:
public enum UnitType {
JUICES,
DRINKS,
SNACKS,
NPD;
}
那么如何查询UnitResult
类型为Unit
的所有UnitType.JUICES
?
答案 0 :(得分:16)
那么如何查询Unit Type为UnitType.JUICES的所有UnitResult?
在ORMLite中执行此操作的方法是使用`Where.in(...) with a sub-query:
// 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();