ActiveAndroid抽象类表

时间:2015-06-30 11:04:10

标签: java android sqlite orm activeandroid

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

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

这会导致'动物'包含所有已保存的猫和狗。 或者:

Animal animal = new Select().from(Animals.class).where("name = ?", name).executeSingle();

'动物'可以是猫还是狗。 不幸的是,当我这样做时,我得到一个异常,因为没有为抽象类Animal创建表。 有谁知道我怎么用ActiveAndroid来解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

如果你想在这里修改ActiveAndroid,你可以做什么:

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

说实话,我从未在任何Android ORM库中看到过继承,而且我个人认为它不是一个很好的模型设计模式。您可能想重新考虑沿着这条道路前进的理由。