Как расширить класс ORMLite BaseDaoImpl на Android для расширения функциональности

Мне интересно, есть ли способ расширить класс ORMLite BaseDaoImpl на Android. В моем проекте Android я использую несколько разных объектов Dao для доступа к различным бизнес-объектам. Мои бизнес-объекты хранятся в разных таблицах и все наследуются от базового класса BusinessObject, который имеет два члена Long id; И Long objectId; Где id – реальный уникальный идентификатор объекта в таблице базы данных.

 public abstract class BusinessObject{ public static final String ID_COLUMN_NAME = "_id"; public static final String OBJECT_ID_COLUMN_NAME = "object_id"; @SerializedName(value="_id") @DatabaseField(canBeNull=false, columnName = ID_COLUMN_NAME, generatedId=true) private int id; @SerializedName(value="id") @DatabaseField(canBeNull=false, columnName=OBJECT_ID_COLUMN_NAME, index=true, unique = true) private long objectId; } 

Теперь я хочу иметь возможность удалять бизнес-объекты по id и objectId. Удаление по идентификатору, конечно, уже возможно из-за класса BaseDaoImpl. Чтобы удалить их также с помощью objectId, я подумал о расширении класса BaseDaoImpl и добавлении к нему универсального метода deleteByObjectId (). Внутри метода я удаляю объект с помощью метода dao delete (), который принимает инструкцию PreparedDelete.

 public class ExtendedDaoImple<T, ID> extends BaseDaoImpl<T, ID> implements ExtendedDao<T, ID> { protected ExtendedDaoImple(Class<T> dataClass) throws SQLException { super(dataClass); } public int deleteByObjectId(long objectId) throws SQLException { DeleteBuilder<T, ID> delBuilder = (DeleteBuilder<T, ID>) deleteBuilder(); delBuilder.where().eq(BusinessObject.OBJECT_ID_COLUMN_NAME, objectId).prepare(); return delete(delBuilder.prepare()); } } 

Моя проблема в том, что я не знаю, как создать экземпляр класса ExtendedDaoImpl из класса OrmLiteSqliteOpenHelper . Обычно Dao создается путем вызова метода getDao () класса OrmLiteSqliteOpenHelper и передачи класса BusinessObject, к которому должен использоваться Дао. Например

 Dao<Image, Long> imageDao = getDao(Image.class); 

Итак, есть способ изменить класс OrmLiteSqliteOpenHelper таким образом, чтобы объекты ExtendedDaoImpl могли быть восстановлены вместо объекта BaseDaoImpl?

Solutions Collecting From Web of "Как расширить класс ORMLite BaseDaoImpl на Android для расширения функциональности"

Моя проблема в том, что я не знаю, как создать экземпляр класса ExtendedDaoImpl из класса OrmLiteSqliteOpenHelper …

Хорошо сформулированный вопрос. Аннотация @DatabaseTable имеет поле daoClass которое может использоваться для указания класса DAO для построения.

http://ormlite.com/javadoc/ormlite-core/com/j256/ormlite/table/DatabaseTable.html#daoClass ()

Вот документы для DaoManager .

http://ormlite.com/docs/dao-manager

В вашем классе должен быть конструктор с аргументами ConnectionSource и Class .

Решение плохо документировано. Дайте мне знать, если у вас есть идеи, как я могу улучшить документацию.