درخواست راهنمایی در رابطه با ذخیره کردن لیستی از یک Model خاص در درون مدل دیگر
با سلام
ساختار دیتابیس من با استفاده از Room می باشد.
من یک کلاس به اسم SmsModel دارم.
@Entity(tableName = "sms")
class SMSModel {
@NonNull
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "sms_id")
var id: Int = 0
@ColumnInfo(name = "taglist")
var taglist: ArrayList<TagModel>? = null
}
یک کلاس به اسم TagModelدارم.
@Entity(
tableName = "tag",
foreignKeys = [ForeignKey(
entity = SMSModel::class,
parentColumns = arrayOf("sms_id"),
childColumns = arrayOf("tag_id"),
onDelete = ForeignKey.NO_ACTION
)]
)
class TagModel{
@NonNull
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "tag_id")
var id: Int = 0
@ColumnInfo(name = "sms_id")
var smsId: Int? = null
@ColumnInfo(name = "title")
var name: String? = null
}
چطوری می تونم داخل ستون tagList از کلاس SmsModel لیستی از Tag هارو داخل دیتابیس ذخیره کنم ؟
الان بهم خطای زیر رو میده
error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
private java.util.ArrayList<project.room.model.TagModel> taglist;
نیازی به نوشتن tagList توی کلاس SMSModel نیست. همین که کلاس TagModel نوشته شده و کلید smsId به عنوان کلید خارجی بهش داده شده کاافیه و کاری که شما خواستید انجام میشه.
در واقع برای هر sms میتونید توی جدول tagModel تعدادی که لازم دارین tag داشته باشید. و وقتی نیاز بود با یک query همه ی tag هایی که مربوط به یک sms خاص هست از جدول بگیرید.
قبل از فیلد tagList توی جدول SMSModel یک @Ignore بزارین که توسط room نادیده گرفته بشه و ذخیره نشه توی دیتابیس و تعریف کلید خارجی برای TagModel هم فکر میکنم اشتباهه و اینجوری باید باشه
@Entity(
tableName = "tag",
foreignKeys = @ForeignKey(entity = SMSModel::class,
parentColumns = "sms_id",
childColumns = "sms_id",
onDelete = CASCADE)
)
سلام
شما نمیتوانید اینطور یک ارایه رو توی ی ستون از جدول ذخیره کنید چون نوع اون ستون رشته (string) هست و نمیشه
دو راه دارید یا دیتا رو دستی به string تبدیل کنید مثلا به json تبدیل کنید یا اینطوری a|b|c
یا از many to many relation استفاده کنید که باید ی جدول دیگهای ایجاد کنید.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .