我想知道如何在Room数据库中租用数据类。 例如,有这样的东西
@Entity(tablename = "user")
abstract class User {
var name: String,
var id: Int
}
现在我想创建一个特定的用户,该用户具有User类的所有属性作为实体来存储和从数据库中加载它们
@Entity(tablename = "user")
data class FreeUser {
override var name: String,
override var id: Int,
var freeUserAttirbute: String
} : User ()
和
@Entity(tablename = "user")
data class PremiumUser {
override var name: String,
override var id: Int,
var premiumUserAttirbute: String
} : User ()
作为DAO,我会写这样的东西
interface UserDao {
@Query("SELECT * FROM 'user'")
fun getAllUser(): List<User>
现在,当我建立自己的应用程序室时,它告诉我User
类不能是抽象的。如何解决数据类和Room中的继承问题?
答案 0 :(得分:0)
您可以尝试这种方式
open class User {
open var name: String = ""
open var id: Int = 0
}
data class PremiumUser(
override var name: String,
override var id: Int,
var premiumUserAttirbute: String
) : User()
data class FreeUser(
override var name: String,
override var id: Int,
var freeUserAttirbute: String
) : User ()
在数据类中使用继承没有太大意义,因为它取消了它们的用途。
编辑评论中的问题答案
创建一个实体
@Entity(tablename = "users")
data class User(
var id: Int,
var name: String,
var isPremium: Boolean
)
DAO应该看起来像这样
interface UserDao {
@Query("SELECT * FROM users")
fun getAllUsers(): List<User>
}
这种方式可以吸引所有用户。如果要查看谁是高级用户,只需检查字段isPremium
是否为真。如果用户是自由用户,则isPremium
应该为假。