Подтвердить что ты не робот

Таблица абстрактных классов 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?

4b9b3361

Ответ 1

К сожалению, ActiveAndroid пока не поддерживает наследование моделей таким образом (https://github.com/pardom/ActiveAndroid/issues/14, https://github.com/pardom/ActiveAndroid/issues/257).

Если вы хотите изменить ActiveAndroid здесь, что вы могли бы сделать:

  • Создайте аннотацию, которая позволяет вам определить модель (Animals) как нечто, которое не сохраняется (см. com.activeandroid.annotation.Table).
  • При попытке выполнить запросы для этого класса вы можете использовать отражение, чтобы определить его дочерние классы, а затем выполнить этот запрос для каждого дочернего класса.
  • Затем вы в основном возьмете список результатов для каждого запроса и объедините их в один список и вернете это.

Честно говоря, я никогда не видел наследования в каких-либо библиотеках Android ORM, и лично я не думаю, что это хороший шаблон дизайна для моделей. Возможно, вам захочется пересмотреть свои рассуждения о том, чтобы пойти по этому пути.