1
我的應用程序使用的數據庫具有許多Tracks
SongVersions
。這種to-manx關係是由greendao生成的,目前工作正常。Greendao:如何更新到許多實體
但現在我嘗試更新曲目 - 讓我們說靜音它 - 更新只工作呢,直到下一個應用程序啓動。這是因爲udpate只反映在緩存的軌道列表中,但並未真正保留到數據庫中。
這裏是我到目前爲止的代碼(不工作)
// iterate through tracks for (Track track : mSongVersion.getTrackList()) { if (trackId.equals(track.getId())) { // mute specific track track.setMuted(muted); mSongVersion.update(); } }
SongVersion
和Track
是由greendao genertated的entitiy類。 SongVersion
有更新() - 方法,但Track
沒有update() - 方法。所以我認爲必須通過使用SongVersion#update()更新「整個事物」來更新特定曲目。 但是這個調用只更新SongVersion,忽略其軌道的變化...
我也嘗試了一些變化(不)重置軌道列表,以確保(不)緩存的值是干擾,但也無濟於事。
編輯:
下面是一些代碼,可能會有幫助。
SongVersion (由greendao產生!):數據庫生成的Java
/** Used for active entity operations. */ private transient SongVersionDao myDao; /** called by internal mechanisms, do not call yourself. */ public void __setDaoSession(DaoSession daoSession) { this.daoSession = daoSession; myDao = daoSession != null ? daoSession.getSongVersionDao() : null; } public void update() { if (myDao == null) { throw new DaoException("Entity is detached from DAO context"); } myDao.update(this); }
配件:
public static void main(String[] args) throws Exception { Schema schema = new Schema(1, "my.app.database"); Entity songVersion = schema.addEntity("SongVersion"); Entity track = schema.addEntity("Track"); // SongVersion fields w/o relations songVersion.setHasKeepSections(true); songVersion.addIdProperty().autoincrement(); songVersion.addStringProperty("name").notNull(); // Track fields w/o relations track.setHasKeepSections(true); track.implementsInterface("Comparable"); track.addIdProperty().autoincrement(); track.addBooleanProperty("muted").notNull(); // relations Property songVersionId = track.addLongProperty("songVersionId").notNull().getProperty(); songVersion.addToMany(track, songVersionId); }
這就是我的問題。我可以使用更新(對象) - 方法從TrackDao(即從AbstractDao的繼承更新方法),但後來我仍然不知道爲什麼產生
SongVersion
提供了一個方便的update() - 方法與myDao場和Track
在一起纔不是。 – muetzenflo我只是使用trackDao測試它,它的工作原理。但是我仍然很樂意解釋關於缺少生成的update() - 方法...... – muetzenflo
要看看SongVersion.update()方法的實現並不容易。你可以添加這部分的代碼? –