gpt4 book ai didi

android - Greendao:如何更新对多实体

转载 作者:搜寻专家 更新时间:2023-11-01 09:48:11 24 4
gpt4 key购买 nike

我的应用程序使用一个数据库,其中 SongVersions 有许多 Tracks。这种与 manx 的关系由 greendao 生成,目前运行良好。

但现在我尝试更新轨道 - 假设将其静音 - 并且更新只会在下一个应用程序启动之前进行。这是因为更新仅反射(reflect)在缓存的轨道列表中,而没有真正持久化到数据库中。

到目前为止,这是我的代码(不工作)

// iterate through tracksfor (Track track : mSongVersion.getTrackList()) {  if (trackId.equals(track.getId())) {   // mute specific track   track.setMuted(muted);   mSongVersion.update();  }}

SongVersionTrack 是greendao生成的实体类。 SongVersion 有一个 update() 方法,但是 Track 没有 update() 方法。所以我在想,必须通过使用 SongVersion#update() 更新“整个事情”来更新特定的轨道。但是这个调用只更新了 SongVersion,忽略了它的轨道变化......

我还尝试了一些(不)重置轨道列表的变体,以确保(没有)缓存值在干扰,但也无济于事。

编辑:

下面是一些可能有用的代码。

歌曲版本(由 greendao 生成!):

/** 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);}

部分数据库生成java:

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

关于android - Greendao:如何更新对多实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36917392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com