2012-06-20 1 views
5

Was ist der beste Weg für die Abfrage, indem Sie den Wert des Feldes des Fremdobjekts verwenden?So erstellen Sie eine Abfrage mit der Auswahl nach dem Wert des Felds für das Fremdobjekt

Angenommen, ich habe diese drei Klassen.

UnitResult Klasse, die Menge der Einheiten beschreibt:

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

Anteilsklasse, die in einem Markt bestimmte Einheiten beschreiben (zB jiuce, Snack 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; 
} 

Und Enum von Gerätetyp :

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

So wie kann ich Abfrage alle UnitResult wo Unit Typ ist UnitType.JUICES?

Antwort

16

Also, wie kann ich alle UnitResult abfragen, wo der Einheitentyp UnitType.JUICES ist?

Die Art und Weise dies in ORMLite zu tun ist, die `Where.in(...) with a sub-query zu verwenden:

// 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

Vielen Dank, Grau! Und Respekt für OrmLite Bibliothek! :) – Yarovoy

+2

Das scheint nicht mehr zu funktionieren. Da die ID-Spalte automatisch zur Abfrage hinzugefügt wird, wird "SQLException" ausgelöst. Die innere Abfrage muss nur eine ausgewählte Spalte anstelle von "*" enthalten. –

+0

Follow-up: Ich glaube, die Absicht ist, dass Sie jetzt eine Verknüpfung verwenden. –

Verwandte Themen