Query e relazioni
Esegua query sui dati e colleghi le entità.
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(): IntDefinire 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
@ForeignKeyapplica l'integrità e le regole di eliminazione a cascata.@Relation+@Embeddedassemblano gli oggetti correlati.@Transactionmantiene coerenti le letture che eseguono più query.
Verifica rapida
Verifichi la Sua comprensione delle relazioni.
Riepilogo
Ha imparato a:
- Parametrizzare le query con
:namee restituire valori aggregati. - Usare
@ForeignKeyper applicare l'integrità con le regoleonDelete. - Usare
@Relation+@Embeddedper creare oggetti correlati e racchiudere le letture in@Transaction.
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
- Entità e DAO
- La classe del database Room
- Query e relazioni
- Osservare i dati con Flow