MrV*_*lev 7 android android-room
我正在开发一个android项目,必须在本地数据库(Room)中存储一些数据.我必须提供的功能之一是以不同语言将数据存储在本地数据库中,例如,如果我有食物信息,则此信息必须以英语,德语,法语等存储.
我的数据库的结构是这样的:
@Entity(tableName = "food")
public class Food{
}
@Entity(tableName = "food_fr")
public class FoodFr{
}
@Entity(tableName = "food_de")
public class FoodDe{
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何让这三个不同的表(在不同的语言中)具有相同的列,并且@Dao对象为所有这些表返回一个公共(父)对象?
我不确定这是否可行,但如果某人有解决方案,请帮助.
提前致谢 :)
Com*_*are 13
最好的解决方案是拥有一个表,而不是三个表.使用的柱(例如,这三种语言之间进行区分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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7185 次 |
| 最近记录: |