有谁知道是否有可能在ActiveAndroid中为抽象类创建表。例如,我可以有一个抽象类Animal,其中有两个具体类Dog和Cat。我希望能够执行以下操作:

List<Animal> animals = new Select().from(Animals.class).execute();

这将导致包含所有已保存的猫和狗的“动物”。
或者:
Animal animal = new Select().from(Animals.class).where("name = ?", name).executeSingle();

“动物”可能是猫还是狗。
不幸的是,当我这样做时,我得到了一个异常(exception),因为没有为抽象类Animal创建任何表。
有谁知道我如何使用ActiveAndroid来解决这个问题?

最佳答案

不幸的是,ActiveAndroid尚不以这种方式支持模型的继承(https://github.com/pardom/ActiveAndroid/issues/14https://github.com/pardom/ActiveAndroid/issues/257)。

如果您想修改ActiveAndroid,可以执行以下操作:

  • 创建某种注释,使您可以将模型(Animals)定义为不持久的对象(请参阅com.activeandroid.annotation.Table)。
  • 在尝试对该类执行查询时,可以使用反射来确定其子类,然后让其针对每个子类执行该查询。
  • 然后,您基本上将获取每个查询的结果列表,并将它们组合为一个列表,然后将其返回。

  • 老实说,我从未在任何Android ORM库中看到继承,而且我个人认为这不是模型的良好设计模式。您可能需要重新考虑沿这条路走的原因。

    09-07 18:13