Cómo extender la clase BaseDaoImpl de ORMLite en Android para ampliar la funcionalidad

Me pregunto si hay una manera de extender la clase BaseDaoImpl de ORMLite en Android. En mi proyecto de Android estoy utilizando varios objetos Dao diferentes para acceder a los diferentes objetos de negocio. Mis objetos de negocio se almacenan en tablas diferentes y son todos heredados de una clase base de BusinessObject que tiene los dos miembros Long id; Y Long objectId; Donde id es el identificador único real del objeto dentro de la tabla de la base de datos.

 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; } 

Ahora quiero poder borrar objetos de negocio por id y por objectId. Eliminar por id es, por supuesto ya posible debido a la clase BaseDaoImpl. Para poder borrarlos también por objectId pensé en extender la clase BaseDaoImpl y añadir un método genérico deleteByObjectId () a ella. Dentro del método yo borraría el objeto usando el método del dele () del dao que toma una instrucción 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()); } } 

Mi problema es que no sé cómo crear una instancia de clase ExtendedDaoImpl forma la clase OrmLiteSqliteOpenHelper . Normalmente, un Dao se crea llamando al método getDao () de la clase OrmLiteSqliteOpenHelper y pasando la clase del BusinessObject para la que se debe usar Dao. P.ej

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

¿Así que hay una manera de modificar la clase OrmLiteSqliteOpenHelper de tal manera que los objetos de ExtendedDaoImpl pueden ser recuperados en lugar de un objeto BaseDaoImpl?

Mi problema es que no sé cómo crear una instancia de clase ExtendedDaoImpl forma la clase OrmLiteSqliteOpenHelper …

Buena pregunta redactada. La anotación @DatabaseTable tiene un campo daoClass que se puede utilizar para especificar la clase DAO a construir.

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

Aquí están los documentos para el DaoManager .

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

Su clase necesitará tener un constructor con argumentos ConnectionSource y Class .

La solución no está bien documentada. Avísame si tienes alguna idea de cómo puedo mejorar la documentación.

  • En la base de datos Sqlite, Cómo insertar varias filas en la tabla al mismo tiempo
  • Cómo personalizar FTS tokenizer en Android
  • Consulta de selección en sqlite android
  • Android SQLite Contraint Conflicto. El intento / captura no pudo atrapar
  • Android: Bulk Insert, cuando InsertHelper está obsoleto
  • Cambio de valores desde Cursor mediante SimpleCursorAdapter
  • Consulta de base de datos de Android ContentProvider varias tablas
  • Android classificar los resultados de la consulta sqlite ignorando el caso
  • Obtención del siguiente valor AUTO_INCREMENT de una base de datos SQLite
  • IllegalStateException: obtiene la ranura de campo de la fila 0 col -1 falló
  • Eliminar todas las filas de tabla de la tabla de base de datos SQLite
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.