是否可以在@Database注释中创建表名?



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

这是我的模型

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

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

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

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

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

如果有一个单独的表,其中的一列(可能已被索引)表示一行所属的组(User),可能会简单得多。

最新更新