Sur la base de ma question précédente ( Salle de persistance Android : "Impossible de savoir comment lire ce champ à partir d'un curseur" ) que j'ai réussi à faire fonctionner grâce aux commentaires, j'ai implémenté le même exemple dans Kolin (voir le code ci-dessous). J'ai dû faire quelques changements mineurs comme les paramètres qui sont maintenant passés à la requête qui doivent être passés comme "p0", "p1" etc. Maintenant, en Kotlin, j'obtiens l'erreur suivante concernant la classe UserWithPets :
erreur : Impossible de savoir comment lire ce champ à partir d'un curseur. e : private java.util.List pets ;
@Dao
interface UserDAO {
@get:Query("SELECT * FROM user")
val all: LiveData<List<User>>
@Insert
fun insertUser(user: User) //single one
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertUsers(vararg users: User)
@Query("SELECT * FROM User")
fun loadUsersWithPets(): LiveData<List<UserWithPets>>
}
@Entity
class Pet( var name: String?, var ownerId: Int,@PrimaryKey(autoGenerate = true)var id:Int)
@Dao
interface PetDAO {
@Query("SELECT * FROM pet")
val all: List<Pet>
@Query("SELECT * FROM pet WHERE id IN (:p0)")
fun loadAllByIds(petIds: IntArray): List<Pet>
@Insert
fun insert(pet: Pet)
@Insert
fun insertAll(vararg pets: Pet)
@Delete
fun delete(user: Pet)
}
class UserWithPets {
@Embedded
var user: User? = null
@Relation(parentColumn = "id", entityColumn = "ownerId", entity = Pet::class)
var pets: List<Pet>? = null
}
Il semble que si j'écris le UserWithPets
en Java fonctionnera correctement, mais échouera si elle est écrite en Kotlin. Une idée de ce qui ne va pas ? S'agit-il d'un problème de traitement des annotations ?