在 Android 房间持久图书馆中,如何将整个 Model 对象插入到本身就有另一个列表的表中。
让我告诉你我的意思:
@Entity(tableName = TABLE_NAME)
public class CountryModel {
public static final String TABLE_NAME = "Countries";
@PrimaryKey
private int idCountry;
private List<CountryLang> countryLang = null;
public int getIdCountry() {
return idCountry;
}
public void setIdCountry(int idCountry) {
this.idCountry = idCountry;
}
public String getIsoCode() {
return isoCode;
}
public void setIsoCode(String isoCode) {
this.isoCode = isoCode;
}
/**
here i am providing a list of coutry information how to insert
this into db along with CountryModel at same time
**/
public List<CountryLang> getCountryLang() {
return countryLang;
}
public void setCountryLang(List<CountryLang> countryLang) {
this.countryLang = countryLang;
}
}
我的 DAO 是这样的:
@Dao
public interface CountriesDao{
@Query("SELECT * FROM " + CountryModel.TABLE_NAME +" WHERE isoCode =:iso_code LIMIT 1")
LiveData<List<CountryModel>> getCountry(String iso_code);
@Query("SELECT * FROM " + CountryModel.TABLE_NAME )
LiveData<List<CountryModel>> getAllCountriesInfo();
@Insert(onConflict = REPLACE)
Long[] addCountries(List<CountryModel> countryModel);
@Delete
void deleteCountry(CountryModel... countryModel);
@Update(onConflict = REPLACE)
void updateEvent(CountryModel... countryModel);
}
当我调用 database.CountriesDao().addCountries(countryModel);
时,我得到下面的房间 db 编译错误:
错误: (58,31)错误: 无法找出如何将此字段保存到数据库中。可以考虑为其添加类型转换器。
应该有另一个桌子叫 CountryLang 吗?如果是这样,如何告诉房间连接上插入语句?
CountryLang 对象本身是这样的:
public class CountryLang {
private int idCountry;
private int idLang;
private String name;
public int getIdCountry() {
return idCountry;
}
public void setIdCountry(int idCountry) {
this.idCountry = idCountry;
}
public int getIdLang() {
return idLang;
}
public void setIdLang(int idLang) {
this.idLang = idLang;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
答案是这样的:
"country_lang": [
{
"id_country": 2,
"id_lang": 1,
"name": "Austria"
}
]
每个国家,所以它不会是一个以上的项目在这里。我舒适的设计它只有一个项目在国家的长长的名单。所以我可以为 country _ lang 创建一个表,然后把它链接到 CountryModel。但是怎么做呢?我可以用外键吗?我希望我不用用平面文件夹。所以你的意思是我必须把它存储为 json?是否建议暂时不要使用房间?用什么代替呢?