Wie erweitere ich die BaseDaoImpl-Klasse von ORMLite auf Android, um die Funktionalität zu erweitern

Ich frage mich, ob es eine Möglichkeit gibt, die BaseDaoImpl Klasse von ORMLite auf Android zu erweitern. In meinem Android-Projekt verwende ich mehrere Dao-Objekte, um auf die verschiedenen Business-Objekte zuzugreifen. Meine Business-Objekte werden in verschiedenen Tabellen gespeichert und sind alle geerbt aus einer BusinessObject-Basisklasse, die die beiden Mitglieder hat Long id; Und Long objectId; Wobei id die echte eindeutige ID des Objekts innerhalb der Datenbanktabelle ist.

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

Jetzt möchte ich in der Lage sein, Business-Objekte von id und von objectId zu löschen. Das Löschen durch id ist natürlich auch aufgrund der BaseDaoImpl-Klasse möglich. Um sie auch durch objectId löschen zu können, dachte ich über die Erweiterung der BaseDaoImpl-Klasse und das Hinzufügen einer generischen Methode deleteByObjectId () -Methode. Innerhalb der Methode würde ich das Objekt mit der Dao's Delete () -Methode löschen, die eine PreparedDelete-Anweisung annimmt.

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

Mein Problem ist, dass ich nicht weiß, wie man eine Instanz von ExtendedDaoImpl Klasse Form der OrmLiteSqliteOpenHelper Klasse erstellen . Normalerweise wird ein Dao erstellt, indem du die getDao () – Methode der OrmLiteSqliteOpenHelper-Klasse aufrufst und die Klasse des BusinessObjects übergibst, für die das Dao verwendet werden soll. Z.B

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

Gibt es also eine Möglichkeit, die OrmLiteSqliteOpenHelper-Klasse so zu modifizieren, dass ExtendedDaoImpl-Objekte anstelle eines BaseDaoImpl-Objekts abgerufen werden können?

  • Wie lautet der Fehler "HeapWorker ist verkeilt" in Android?
  • EditText afterTextChanged funktioniert nicht
  • Android verschlüsseln / entschlüsseln sqlite Datenbank 100% sicher
  • SQLCipher für Android: icudt46l.zip wirklich benötigt?
  • Wo Klausel in SQLite nicht in Android :(
  • SQLite in Android So aktualisieren Sie eine bestimmte Zeile
  • SQLite-Datenbank-Update-Abfrage mit mehreren wo Bedingungen in Android
  • So speichern Sie datetime in SQLite
  • One Solution collect form web for “Wie erweitere ich die BaseDaoImpl-Klasse von ORMLite auf Android, um die Funktionalität zu erweitern”

    Mein Problem ist, dass ich nicht weiß, wie man eine Instanz von ExtendedDaoImpl Klasse Form der OrmLiteSqliteOpenHelper Klasse erstellen …

    Schön formulierte Frage. Die @DatabaseTable Annotation hat ein Feld daoClass dem die DAO-Klasse konstruiert werden kann.

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

    Hier sind die docs für den DaoManager .

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

    Ihre Klasse muss einen Konstruktor mit ConnectionSource und Class Argumenten haben.

    Die Lösung ist nicht gut dokumentiert. Lassen Sie mich wissen, wenn Sie irgendwelche Ideen haben, wie ich die Dokumentation verbessern kann.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.