【发布时间】:2011-11-25 19:55:50
【问题描述】:
我想知道是否有办法在 Android 上扩展 ORMLite 的 BaseDaoImpl 类。在我的 Android 项目中,我使用了几个不同的 Dao 对象来访问不同的业务对象。我的业务对象存储在不同的表中,并且都继承自 BusinessObject 基类,该基类具有两个成员 Long id; 和 Long objectId;,其中 id 是数据库表中对象的真正唯一 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 类,通过 id 删除当然是可能的。为了能够通过 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());
}
}
我的问题是我不知道如何从 OrmLiteSqliteOpenHelper 类创建 ExtendedDaoImpl 类的实例。通常,通过调用 OrmLiteSqliteOpenHelper 类的 getDao() 方法并传递 Dao 应用于的 BusinessObject 类来创建 Dao。例如。
Dao<Image, Long> imageDao = getDao(Image.class);
那么有没有办法修改 OrmLiteSqliteOpenHelper 类,从而可以检索 ExtendedDaoImpl 对象而不是 BaseDaoImpl 对象?
【问题讨论】: