ActiveAndroid抽象类表

use*_*561 17 java sqlite orm android activeandroid

有谁知道是否可以在ActiveAndroid中为抽象类创建表.例如,我可以有一个抽象类Animal,它有两个具体的类Dog和Cat.我希望能够做到这样的事情:

List<Animal> animals = new Select().from(Animals.class).execute();
Run Code Online (Sandbox Code Playgroud)

这会导致'动物'包含所有已保存的猫和狗.要么:

Animal animal = new Select().from(Animals.class).where("name = ?", name).executeSingle();
Run Code Online (Sandbox Code Playgroud)

"动物"可以是猫还是狗.不幸的是,当我这样做时,我得到一个异常,因为没有为抽象类Animal创建表.有谁知道如何使用ActiveAndroid进行此操作?

Nyx*_*Nyx 1

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

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

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

老实说,我从未在任何 Android ORM 库中见过继承,而且我个人认为这不是一个好的模型设计模式。您可能需要重新考虑走这条路的理由。