Come estendere la class BaseDaoplpl di ORMLite su Android per estendere la funzionalità

Mi chiedo se c’è un modo per estendere la class BaseDaoImpl di ORMLite su Android. Nel mio progetto Android sto utilizzando diversi oggetti Dao per accedere ai diversi oggetti business. I miei oggetti business sono memorizzati in tabelle diverse e sono tutti ereditati da una class base BusinessObject che ha i due membri Long id; e Long objectId; dove id è il vero ID univoco dell’object all’interno della tabella del database.

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

Ora voglio essere in grado di eliminare oggetti business per id e per objectId. La cancellazione tramite ID è ovviamente già ansible a causa della class BaseDaoImpl. Per poterli eliminare anche da objectId ho pensato di estendere la class BaseDaoImpl e aggiungere un metodo metodo deleteByObjectId () generico. All’interno del metodo vorrei eliminare l’object usando il metodo delete () di dao che prende un’istruzione 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()); } } 

Il mio problema è che non so come creare un’istanza di class ExtendedDaopl di class OrmLiteSqliteOpenHelper . Normalmente un Dao viene creato chiamando il metodo getDao () della class OrmLiteSqliteOpenHelper e passando la class del BusinessObject per cui deve essere usato Dao. Per esempio

 Dao imageDao = getDao(Image.class); 

Quindi c’è un modo per modificare la class OrmLiteSqliteOpenHelper in modo tale che gli oggetti ExtendedDaoplpl possano essere recuperati invece di un object BaseDaoplpl?

Il mio problema è che non so come creare un’istanza di class ExtendedDaopl di class OrmLiteSqliteOpenHelper …

Domanda ben formulata L’annotazione @DatabaseTable ha un campo daoClass che può essere utilizzato per specificare la class DAO da build.

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

Ecco i documenti per DaoManager .

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

La tua class dovrà avere un costruttore con argomenti ConnectionSource e Class .

La soluzione non è ben documentata. Fammi sapere se hai qualche idea su come posso migliorare la documentazione.