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

Мне интересно, есть ли способ расширить BaseDaoImpl класс ORMLite на 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. Удаление по id, конечно, уже возможно благодаря классу BaseDaoImpl. Чтобы иметь возможность удалять их также по objectId, я подумал о расширении класса BaseDaoImpl и добавлении к нему общего метода deleteByObjectId(). В рамках этого метода я бы удалил объект, используя метод dao's delete(), который принимает оператор PreparedDelete.

public class ExtendedDaoImple extends BaseDaoImpl implements ExtendedDao {

    protected ExtendedDaoImple(Class dataClass) throws SQLException {
        super(dataClass);
    }

    public int deleteByObjectId(long objectId) throws SQLException {
        DeleteBuilder delBuilder = (DeleteBuilder) deleteBuilder();       
        delBuilder.where().eq(BusinessObject.OBJECT_ID_COLUMN_NAME, objectId).prepare();
        return delete(delBuilder.prepare());
    }
}

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

Dao imageDao = getDao(Image.class);

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

14
задан Flo 25 November 2011 в 19:55
поделиться