2012-06-20 14 views
5

Qual è il modo migliore per eseguire query utilizzando il valore del campo dell'oggetto estraneo?Come creare una query con la selezione per valore del campo di un oggetto estraneo

Supponiamo di avere queste tre classi.

classe

UnitResult che descrive importo delle unita:

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

Unità che descrive alcune unità in un mercato (per esempio jiuce, spuntino 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; 
} 

E Enum di tipo Unità :

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

Così come posso interrogare tutti UnitResult doveIl tipoè UnitType.JUICES?

risposta

16

Quindi, come posso interrogare tutto UnitResult dove Tipo unità è UnitType.JUICES?

Il modo per fare questo in ORMLite è quello di utilizzare il `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

ringrazio molto, Grey! E rispetto per la libreria OrmLite! :) – Yarovoy

+2

Questo sembra non funzionare più. Poiché la colonna id viene aggiunta automaticamente alla query, genera "SQLException, la query interna deve avere solo 1 colonna di selezione specificata anziché *". –

+0

Follow-up: Credo che l'intento sia che ora usi un join. –

Problemi correlati