Мне интересно, есть ли способ расширить класс 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 (). Внутри метода я бы удалил объект, используя метод delete () dao, который принимает инструкцию 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. Например.
Dao<Image, Long> imageDao = getDao(Image.class);
Так есть ли способ изменить класс OrmLiteSqliteOpenHelper таким образом, чтобы объекты ExtendedDaoImpl могли быть получены вместо объекта BaseDaoImpl?