آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

درخواست راهنمایی در رابطه با ذخیره کردن لیستی از یک Model خاص در درون مدل دیگر

وحید گروسی  7 سال پیش  7 سال پیش
+1 0

با سلام
ساختار دیتابیس من با استفاده از 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;

 

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Sajad  7 سال پیش
0 0

نیازی به نوشتن 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)
)
0 0
ممنون از اینکه پاسخ دادین بررسی می کنم خبر میدم (7 سال پیش)
پاسخ به سوال 
سجاد عباسی  7 سال پیش
+1 0

سلام

شما نمیتوانید اینطور یک ارایه رو توی ی ستون از جدول ذخیره کنید چون نوع اون ستون رشته (string) هست و نمیشه

دو راه دارید یا دیتا رو دستی به string تبدیل کنید مثلا به json تبدیل کنید یا اینطوری a|b|c

یا از many to many relation استفاده کنید که باید ی جدول دیگه‌ای ایجاد کنید.

+1 0
سلام من یک TypeConvertor ساختم ولی همچنان این خطا رو میده بهم. یک جدول دیگه ساختن هم نمی دونم به چه شکله ( از نظر سینتکس) ممنون میشم راهنماییم کنید (7 سال پیش)
+1 0
یه جدول دیگه ایجاد میکنی حاوی دوتا ایدی که برای دوتا جدول هست و برای هر مورد از لیست توی این جدول وارد میکنید. (7 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .