J'ai une question qui sera peut-être facile pour certains d'entre vous mais que je n'arrive vraiment pas à résoudre.
J'ai un json formaté comme ceci :
{
"id" : "1641S818",
"balance" : "100.20",
"transactions" : [
{
"id" : "item1",
"price" : "1.50",
"description" : "pen",
"date" : "2018-05-14T14:19:00Z"
},
{
"id" : "item1",
"price" : "9.00",
"description" : "book",
"date" : "2018-05-14T08:19:00Z"
}
]
}
Je voulais essayer de mettre en place une application avec Retrofit + Room pour la première fois, et j'ai du mal à construire des modèles.
J'ai créé ces classes de données pour Retrofit et elles fonctionnent bien. Ce n'est pas une surprise car je sais comment l'utiliser.
data class Account (
val id : String,
val balance : Double,
val transactions : List<Transaction>
)
data class Transaction (
val id : String,
val price : Double,
val description : String,
val date : String
)
Les vrais problèmes commencent lorsque je veux sauvegarder cette structure dans une base de données, avec cette relation un à plusieurs existant entre le compte et la transaction. Jusqu'à présent, j'ai compris que Room ne pouvait pas gérer ce type de structure et que je devais créer des classes différentes pour le modèle de base de données. C'est ce que j'ai fait :
@Entity(tableName = "account")
data class AccountData(
@ColumnInfo(name = "id")
@PrimaryKey(autoGenerate = false)
val id: String,
val balance: Double,
)
@Entity(
tableName = "transaction",
foreignKeys = [
ForeignKey(
entity = AccountData::class,
parentColumns = ["id"],
childColumns = ["account_id"],
onUpdate = ForeignKey.CASCADE,
onDelete = ForeignKey.CASCADE
)
]
)
data class TransactionData(
@PrimaryKey(autoGenerate = false)
@ColumnInfo(name = "id")
val transactionId: String,
@ColumnInfo(name = "account_id")
val accountId: String,
val price: Double,
val description: String,
val date: String
)
Maintenant, la partie où je suis coincé. Je n'arrive pas à trouver un guide, un exemple, quoi que ce soit qui montre où convertir les modèles avec un mappeur (peut-être en utilisant livedata ou rx) dans ce cas particulier, c'est-à-dire lorsque nous avons des relations complexes entre les objets et pas seulement des classes ordinaires.