我想知道如何在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中的继承问题?
您可以尝试这种方式
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
应该为false。