【问题标题】:is it possible to create name of table in @Database annotitation?是否可以在@Database 注释中创建表名?
【发布时间】:2023-03-20 02:35:01
【问题描述】:

我想用一个模型创建两个表。我该怎么做?

这是我的模特

@Entity(tableName = "user_table")
class UserModel
    : Serializable {
    @PrimaryKey
    @NonNull
    var _id: String = ""

    var userName: String? = null

    var userAvatar: String? = null

    @TypeConverters(ConvertersDAO::class)
    var birthDate: Date? = null

    var gender: String? = null

}

和我的数据库

@Database(entities = [UserModel::class], version = 1,exportSchema = false)
abstract class UserRoomDatabase : RoomDatabase() {
    abstract fun getUserDao() : UserDAO

    companion object{
        @Volatile
        private var instance : UserRoomDatabase?= null
        fun getInstance(context : Context): UserRoomDatabase{
            if(instance==null)
                instance = Room
                    .databaseBuilder(context,UserRoomDatabase::class.java,"UserRoomDatabase")
                    .build()
            return instance!!
        }

    }
}

【问题讨论】:

  • 我不确定这是否可行。

标签: android android-room


【解决方案1】:

我想用一个模型创建两个表。我该怎么做?

简而言之,您不能因为它是 @Entity 注释并将类作为实体包含在 @Database 类中,它将类定义为 a 表。

最接近使用 Class 作为模型的方法是 a) 继承 UserModel 类或 b) 使用 @Embedded 将 UserModel 类嵌入到另一个类中。

但是,您仍然需要单独的 Dao,因为表名在其中指定并且不能是变量,或者使用在编译时未检查的原始查询,其中表名可以作为变量传递。

如果有一个带有列的表可能要简单得多,该列可能已编入索引,指示行所属的组(用户)。

【讨论】:

  • 哦,我明白了。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2015-08-02
  • 2017-07-07
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
相关资源
最近更新 更多