Home > DeveloperSection > Forums > Create table for an abstract class in ActiveAndroid
naomi burke
naomi burke

Total Post:28

Posted on    July-09-2015 7:12 AM

 Android Android  Java 

 1 Reply(s)
 574  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?

Mayank Tripathi
Mayank Tripathi

Total Post:397

Posted on    July-09-2015 8:22 AM

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 (https://github.com/pardom/ActiveAndroid/issues/14 ,

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.

Don't want to miss updates? Please click the below button!

Follow MindStick