我正在开发一个 android 项目,该项目必须在本地数据库(房间)中存储一些数据。我必须提供的功能之一是以不同语言将数据存储在本地数据库中,例如,如果我有食物信息,则该信息必须以英语、德语、法语等存储。
我的数据库的结构是这样的:
@Entity(tableName = "food")
public class Food{
}
@Entity(tableName = "food_fr")
public class FoodFr{
}
@Entity(tableName = "food_de")
public class FoodDe{
}
我的问题是如何让这三个不同的表(在不同的语言上)具有相同的列,并且 @Dao 对象为所有这些表返回一个公共(父)对象?
我不太确定这是否可能,但如果有人有针对这种情况的解决方案,请提供帮助。
提前致谢 :)
最好的解决方案是使用一个表,而不是三个表。使用一列来区分三种语言(例如,alanguage
列与en
, fr
, and de
值)。由于无论如何您都将重写大部分现有代码,因此从三个表切换到一个表似乎不会成为主要障碍。
话虽这么说,为了保持现有的三表结构,Food
, FoodFr
, and FoodDe
全部从一个公共基类扩展(例如,BaseFood
),您可以在其中定义字段/列。
对于查询,您需要让 DAO 处理所有四种情况(三个特定语言表,加上组合所有三种结果的方法),例如:
@Query("SELECT * FROM Food")
List<Food> getAllFood();
@Query("SELECT * FROM FoodFr")
List<FoodFr> getAllFrenchFood();
@Query("SELECT * FROM FoodDe")
List<FoodDe> getAllGermanFood();
@Transaction
List<BaseFood> getAllFoodAcrossAllThreeLanguages() {
ArrayList<BaseFood> result=new ArrayList<>();
result.addAll(getAllFood());
result.addAll(getAllFrenchFood());
result.addAll(getAllGermanFood());
return result;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)