【问题标题】:Inheritance with Sugar ORM继承与糖 ORM
【发布时间】:2018-05-29 19:40:44
【问题描述】:

您好,我想将 Sugar ORM 与继承一起使用。

我的课程:

  public class Building extends SugarRecord<Building> {

        protected String name;
     }

和:

 public class Kitchen extends Building{

    int value =1;
 }

当我保存一些厨房并列出它们时,我只能查询厨房 AS Kitchens,但不能查询 AS Buildings。

我能以某种方式解决这个问题吗?还是 Sugar ORM 没有这个功能?

日志记录:

   List<Building> buildingsList = Building.listAll(Building.class);

   for (Building buidling : buildingsList) {
        Log.i("Buildings: ", buidling.toString());
   }

   List<Kitchen> kitchenList = Kitchen.listAll(Kitchen.class);

   for (Kitchen kitchen : kitchenList) {
        Log.i("Kitchens: ", kitchen.toString());
   }

输出:

//Adding Kitchens, 
10-04 13:10:53.212: I/Sugar(12104): Kitchen saved : 1
10-04 13:10:58.058: I/Sugar(12104): Kitchen saved : 2
10-04 13:10:58.455: I/Sugar(12104): Kitchen saved : 3


//Listing Buildings, nothing
10-04 13:11:16.993: D/SQL Log(12104): SQLiteQuery: SELECT * FROM BUILDING

*NONE*

    //Listing as Kitchens, here they are:
    10-04 13:11:16.993: D/SQL Log(12104): SQLiteQuery: SELECT * FROM KITCHEN
    10-04 13:11:16.994: I/Kitchens:(12104): com.adamvarhegyi.clanwars.application.model.Kitchen@103ff5bd
    10-04 13:11:16.994: I/Kitchens:(12104): com.adamvarhegyi.clanwars.application.model.Kitchen@354967b2
    10-04 13:11:16.994: I/Kitchens:(12104): com.adamvarhegyi.clanwars.application.model.Kitchen@33859303

【问题讨论】:

  • 如果您愿意考虑另一个可以轻松处理继承的 ORM,请尝试JDXA。 JDXA 可以多态地获取类层次结构中的对象。此外,JDXA 不需要您从任何基类扩展模型类。

标签: android inheritance orm sugarorm


【解决方案1】:

表名与类名相同,因此您无法查询建筑中的厨房,反之亦然。我建议你在 Kitchen 类上使用 @Table 注解为 Kitchen 创建一个表,并确保你有一个私有的 long id 变量用于表(如果你使用 @Table 注解要满足一个条件) 希望对您有所帮助!

【讨论】:

    【解决方案2】:

    您为什么要尝试继承厨房中的父类?您是否试图将厨房与建筑物联系起来?如果是这种情况,您可以使用建立在关系中的糖:

    public class Building extends SugarRecord<Building> {
    
        protected String name;
        Kitchens kitchen; 
    }
    

    这可以让您将厨房与建筑物联系起来。

    【讨论】:

      【解决方案3】:

      Sugar ORM 不支持创建表序列的继承。扩展 SugarRecord 是使用 Sugar ORM 创建表的唯一方法。 Kitchen 不会被 Sqlite 视为一个表,查询它确实没有任何意义。 建议:尽量让你的代码适合扩展SugarRecord或者搜索其他ORM。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 2023-01-26
        • 1970-01-01
        • 1970-01-01
        • 2012-05-22
        • 1970-01-01
        相关资源
        最近更新 更多