Greendao:如何更新到许多实体
问题描述:
我的应用程序使用的数据库具有许多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修改后更新的跟踪列表实例。像这样:
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
trackDao = daoSession.getTrackDao();
// iterate through tracks
for (Track track : mSongVersion.getTrackList()) {
if (trackId.equals(track.getId())) {
// mute specific track
track.setMuted(muted);
trackDao.update(track);
}
}
这就是我的问题。我可以使用更新(对象) - 方法从TrackDao(即从AbstractDao的继承更新方法),但后来我仍然不知道为什么产生
SongVersion
提供了一个方便的update() - 方法与myDao场和Track
在一起才不是。 – muetzenflo我只是使用trackDao测试它,它的工作原理。但是我仍然很乐意解释关于缺少生成的update() - 方法...... – muetzenflo
要看看SongVersion.update()方法的实现并不容易。你可以添加这部分的代码? –