Android Academy · Lezione

Query e relazioni

Esegua query sui dati e colleghi le entità.

Lezione 3 di 413 passaggi

Query e relazioni è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Android Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Android Academy include 4 lezioni in totale.

Oltre una singola tabella

Le app reali contengono dati correlati: un utente ha molti post, un ordine ha molti articoli. Room li modella con le chiavi esterne e l'annotazione @Relation.

Query parametrizzate

Passi gli argomenti a una @Query usando il prefisso dei due punti.

@Query("SELECT * FROM users WHERE name LIKE :search")
suspend fun search(search: String): List<User>

Restituire valori aggregati

Le query possono restituire valori scalari, come i conteggi.

@Query("SELECT COUNT(*) FROM users")
suspend fun count(): Int

Definire una chiave esterna

Un'entity figlia fa riferimento alla propria entity padre con @ForeignKey. Questo impone l'integrità referenziale a livello di database.

@Entity(
    foreignKeys = [ForeignKey(
        entity = User::class,
        parentColumns = ["id"],
        childColumns = ["userId"]
    )]
)
data class Post(
    @PrimaryKey val id: Int,
    val userId: Int,
    val title: String
)

Indicizzare le chiavi esterne

Room consiglia di indicizzare le colonne delle chiavi esterne per migliorare le prestazioni delle query. Aggiunga una @Index.

@Entity(
    indices = [Index("userId")]
)
data class Post(/* ... */ val userId: Int)

Comportamento di onDelete

Decida cosa accade agli elementi figli quando viene eliminato l'elemento padre, ad esempio usando CASCADE per eliminare anche loro.

ForeignKey(
    entity = User::class,
    parentColumns = ["id"],
    childColumns = ["userId"],
    onDelete = ForeignKey.CASCADE
)

Modellare una relazione uno-a-molti

Crei una classe che combini l'elemento padre con i relativi figli usando @Embedded e @Relation.

data class UserWithPosts(
    @Embedded val user: User,
    @Relation(
        parentColumn = "id",
        entityColumn = "userId"
    )
    val posts: List<Post>
)

Interrogare la relazione

Restituisca la classe combinata da un DAO. Room esegue la query aggiuntiva e unisce gli oggetti.

@Transaction
@Query("SELECT * FROM users")
suspend fun getUsersWithPosts(): List<UserWithPosts>

Perché usare @Transaction qui

Poiché Room esegue due query (prima i genitori, poi i figli), racchiudere il metodo in @Transaction garantisce uno snapshot coerente, senza scritture intercalate.

Molti-a-molti con una tabella di collegamento

Per le relazioni molti-a-molti (studenti e corsi), usi una tabella di collegamento e il parametro associateBy di @Relation.

@Relation(
    parentColumn = "studentId",
    entityColumn = "courseId",
    associateBy = Junction(Enrollment::class)
)
val courses: List<Course>

Riepilogo delle relazioni

  • @ForeignKey applica l'integrità e le regole di eliminazione a cascata.
  • @Relation + @Embedded assemblano gli oggetti correlati.
  • @Transaction mantiene coerenti le letture che eseguono più query.

Verifica rapida

Verifichi la Sua comprensione delle relazioni.

Riepilogo

Ha imparato a:

  • Parametrizzare le query con :name e restituire valori aggregati.
  • Usare @ForeignKey per applicare l'integrità con le regole onDelete.
  • Usare @Relation + @Embedded per creare oggetti correlati e racchiudere le letture in @Transaction.
Gratis per iniziare

Impara Kotlin con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
36
Lezioni
152

Domande Frequenti

La lezione «Query e relazioni» è gratuita?

Sì — il testo completo di «Query e relazioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Android Academy, passa a CoddyKit PRO. Il corso Android Academy include 4 lezioni in totale.

Cosa imparerò in «Query e relazioni»?

Esegua query sui dati e colleghi le entità. Eserciti Android Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Android Academy?

Non è richiesta alcuna esperienza precedente. Android Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Query e relazioni»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Android Academy?

Sì. Ogni lezione Android Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Entità e DAO
  2. La classe del database Room
  3. Query e relazioni
  4. Osservare i dati con Flow
← Torna a Android Academy