2017-06-13 9 views
10

フィードバックに感謝して前回の質問(Android Persistence room: "Cannot figure out how to read this field from a cursor")をベースにして、私はKolin(下のコードを参照)で同じサンプルを実装しました。 "p0"、 "p1"などのように渡す必要のあるクエリに渡されるパラメータのようなマイナーな変更を加えなければなりませんでした。 Kotlinでは、UserWithPetsクラスに関する次のエラーが表示されます。Room Persistence @RelationはJavaで動作しますが、Kolinでは動作しません

エラー:このフィールドをカーソルから読み取る方法を特定できません。 e:プライベートjava.util.Listペット;

@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 
} 

私がJavaでUserWithPetsクラスを記述する場合、それが正常に動作しますように見えますが、それはKotlinで書かれているときに失敗します。どんなアイデアが間違っている?注釈処理の問題ですか?

+0

'List <@JvmSuppressWildcards Pet>'を試してください。ドキュメント:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-suppress-wildcards/ –

+0

私は同じ問題に直面しています。これはKotlinクラスでは機能しません –

+1

私はこの問題をhttps://issuetracker.google.com/issues/62778467で作成しました。原因を解決できませんでした。 –

答えて

0

部屋を1.0.0-alpha8に更新し、リスト< @ JvmSuppressWildcards Pet>を追加してください。

関連する問題