sql >> Databasteknik >  >> RDS >> SQLite

Hur man filtrerar in ett till många förhållande med android room db

Låt oss titta på hur @Relation Arbetar. Det finns två steg:

  1. Rum kör en fråga som du har lagt in i @Query för att få användare. Som vanligt innehåller den frågan inga Joins. Den här frågan används för att hämta den del av data som finns kvar i huvudtabellen (User i ditt fall).
  2. Rummet kör ytterligare en fråga. För det tittar den på @Relation parametrar och förstår vilken tabell den ska fråga härnäst (Record i ditt fall) och vad som ska vara join-condition med användarens resultat. Det är viktigt att du inte har något sätt att inkräkta på den här frågeprocessen. Du kan inte ställa in filter på Record s fält, till exempel. Få resultat Room omvandlar det till önskat format (fyller Lista över Records). ).

Du har val:

  1. För att vända på förhållandet till att ställa in filter på Records tabell (men med det får du platt data utan List).
public class UserWithRecords {
    @Embedded
    protected Record record;
    @Relation(
            parentColumn = "user_id",
            entity = User.class,
            entityColumn = "id"
    )
    protected User user;
}

och för att ändra fråga till:

@Transaction
@Query("SELECT * FROM record_table WHERE date=:date")
public LiveData<List<UserWithRecords>> getDailyRecord(String date);
  1. För att inte använda @Relation alls, skriv en fråga med Joins som du har provat. Men då bör du manuellt transformera resultatet till önskad form i kod (slingresultat och bildande av lista).



  1. Analysera röravgränsad sträng i kolumner?

  2. Vad är en kandidatnyckel i databasdesign?

  3. Hur genererar man hela DDL för ett Oracle-schema (skriptbart)?

  4. R12.2 Online patchningscykel Sammanfattning