2012-06-20 6 views
5

¿Cuál es la mejor forma de consultar mediante el uso del valor del campo del objeto extraño?Cómo generar una consulta con la selección por valor del campo del objeto extraño

Supongamos que tengo estas tres clases.

clase

UnitResult que describe la cantidad de unidades:

@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; 
} 
clase

Unidad que describe ciertas unidades en un mercado (por ejemplo jiuce, merienda, etc.):

@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; 
} 

Y Enumeración del tipo de unidad :

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

Entonces, ¿cómo es posible consultar todos los que UnitResult donde Unit tipo es UnitType.JUICES?

Respuesta

16

Entonces, ¿cómo puedo consultar todo UnitResult donde el tipo de unidad es UnitType.JUICES?

La manera de hacer esto en ORMLite es utilizar el `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(); 
+3

Muchas gracias, gris! ¡Y respeto por la biblioteca de OrmLite! :) – Yarovoy

+2

Esto ya no parece funcionar. Debido a que la columna de Id. Se agrega automágicamente a la consulta, arroja "SQLException, la consulta interna debe tener solo 1 columna de selección especificada en lugar de *". –

+0

Seguimiento: creo que la intención es que ahora uses un join. –

Cuestiones relacionadas