Мне интересно, есть ли способ расширить 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?