Base on my previous question (Android Persistence room: "Cannot figure out how to read this field from a cursor") which I got to work thanks the feedback, I implemented the same example in Kolin (see code below). I had to make some minor changes like the parameters that are now passed to a the query which have to be passed as "p0", "p1" etc. Now in Kotlin I get the following error related to the UserWithPets class:
error: Cannot figure out how to read this field from a cursor. 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 }
It appears that if I write the UserWithPets
class in Java it will work fine, but fails when it is written in Kotlin. Any ideas what is wrong? Is this an annotation processing issue?