我在一个Android项目上工作,该项目必须在本地数据库(房间)中存储一些数据。我必须提供的功能之一是将数据以不同的语言存储在本地数据库中,例如,如果我有食品信息,则该信息必须以英语,德语,法语等存储。
我的数据库的结构是这样的:
@Entity(tableName = "food")
public class Food{
}
@Entity(tableName = "food_fr")
public class FoodFr{
}
@Entity(tableName = "food_de")
public class FoodDe{
}
我的问题是,如何让这三个不同的表(使用不同的语言)具有相同的列,并且@Dao对象为所有表返回一个公共(父)对象?
我完全不确定这是否有可能,但是如果有人对这种情况有解决方案,请提供帮助。
提前致谢 :)
最好的解决方案是只有一个表,而不是三个表。使用的柱(例如,这三种语言之间进行区分language
用柱en
,fr
和de
值)。由于无论如何都会重写许多现有代码,因此从三个表切换到一个表似乎并不是主要障碍。
话虽如此,为了保持现有的三表结构,具有Food
,FoodFr
和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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句