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.
- Cómo obtener ArrayIndex fuera de límites Excepción al agregar nuevos elementos a la lista mientras se desplaza
- ¿Cuál es el propósito de FeedReaderContract y cómo definir la clase interna en OpenHelper Class
- Cómo almacenar la clave utilizada en SQLCipher para android
- Android sqlite ordenar en la columna calculada (coordina la distancia)
- Los datos se rellenan de la fecha de una tabla en particular en lugar de toda la tabla en sqlite
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?
- Cambio de cursor en CursorAdapter
- ¿Cómo puedo recuperar datos de la base de datos con el cursor? (Android, SQLite)
- Seleccione la última fila
- Sqlite base de datos no creada
- Android: Guardar imágenes en la base de datos Sqlite
- ¿Cómo puedo comprobar si mi tabla sqlite contiene datos?
- SQLite de Android "ENTRE" no incluye o devuelve todos los registros
- Android / SQLite - Operación de bits en la cláusula WHERE
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
.
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.
- Android gran icono de notificación, hay una manera de eliminar el icono más pequeño en la parte inferior derecha?
- ¿Cómo puedo usar los servicios de google play en un proyecto de maven?