Create table for an abstract class in ActiveAndroid

Total Post:28

 1392  View(s)
Rate this:
Is it possible to create a table for an abstract class in ActiveAndroid. For example i could have an abstract class Animal with two concrete classes Dog and Cat. I want to be able to do something like:

List<Animal> animals = new Select().from(Animals.class).execute();
which would result in 'animals' containing all of the saved Cats and Dogs. Or:
Animal animal = new Select().from(Animals.class).where("name = ?", name).executeSingle();
Where 'animal' could be either a Cat or a Dog. Unfortunately when I do this I get an exception because no table is created for the abstract class Animal. Does anyone know how I might go about this using ActiveAndroid?
  1. Post:397

    Re: Create table for an abstract class in ActiveAndroid

    I have done some research on Internet and i found this answer :

    Unfortunately ActiveAndroid does not support inheritance of models in that way just yet ( ,

    If you wanted to modify ActiveAndroid here's what you could do:

    Create some kind of annotation that allows you define a model (Animals) as something that isn't persisted (refer to com.activeandroid.annotation.Table).
    Upon trying to executing queries for that class you could use reflection to determine its child classes and then have it perform that query per child class.
    Then you would basically take the list of results for each query and combine them into a single list and return that.
    To be honest I've never seen inheritance in any Android ORM libraries, and personally I don't think it's a good design pattern for models. You may want to reconsider your reasoning for going down this path.