2017-06-13 54 views
10

基于我以前的问题(Android Persistence room: "Cannot figure out how to read this field from a cursor"),我得到了反馈意见,我在Kolin中实现了同样的例子(请参阅下面的代码)。我不得不做一些小的改变,如现在传递给查询的参数必须以“p0”,“p1”等形式传递。 现在在Kotlin中,我得到以下与UserWithPets类相关的错误:使用Java进行工作的Room Persistence @Relation,但不是在Kolin

错误:无法弄清楚如何从光标读取此字段。 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 
} 

看来,如果我写的UserWithPets类在Java中它会正常工作,但是当它是写在科特林失败。任何想法有什么不对?这是一个注释处理问题吗?

+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宠物>。

相关问题