我使用以下架构,Realm定义了一个拥有收藏歌曲列表的用户:
public class User extends RealmObject {
@PrimaryKey
Long id;
RealmList<FavoriteSong> favoriteSongs;
}
public class FavoriteSong extends RealmObject {
String label;
Song song;
}
public class Song extends RealmObject {
@PrimaryKey
Long id;
String title;
}
我的应用程序模型基本上反映了服务器模型。因此,当我收到新的FavoriteSong时,我想将其保存到领域:
FavoriteSong favoriteSong = ...favorite song from server
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
// Add a new FavoriteSong
realm.copyToRealm(favoriteSong); // Fails with Value already exists: 0
}
这失败了,因为FavoriteSong中包含的Song已经存在于域中,违反了主键约束。
一种解决方案是将收藏夹歌曲标签设置为主键:
public class FavoriteSong extends RealmObject {
@Primary
String label;
Song song;
}
然后使用CopToRealmOrUpdate()而不是CopToRealm(),它在插入之前检查所有关系的主键:
realm.copyToRealmOrUpdate(favoriteSong);
这是可行的,但不幸的是我不能这样做,因为可能有几首FavoriteSongs具有相同的标签,而主键不允许这样做。
任何想法,我如何将一个 FavoriteSong 添加到没有主键的领域,并且它不会失败主键约束?
使用
import io.realm.annotations.PrimaryKey;
而不是
import androidx.room.PrimaryKey;
请试一下
FavoriteSong favoriteSong = ...favorite song from server
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Song tempSong = favoriteSong.getSong();
favoriteSong.setSong(null);
FavoriteSong savedFavoriteSong = realm.copyToRealm(favoriteSong);
Song dbSong = realm.where(Song.class).equalTo(SongFields.ID, tempSong.getId()).findFirst();
if(dbSong == null) {
dbSong = realm.copyToRealmOrUpdate(tempSong);
}
savedFavoriteSong.setSong(dbSong);
}
松菲尔德假设
你正在使用 https://github.com/cmelchior/realmfieldnameshelper
问题内容: 我是快速入门的新手。我想做一个复合主键,当我尝试这样的事情时: 我收到此错误:对象’DbLocation’上不存在’主键属性’uuid’ 任何人都可以通过示例为我提供帮助,该示例如何创建复合主键? 问题答案: 对于领域: 用法示例: 当然,你可以玩弄各种使用上的听众和,以确保compoundKey才能正确重写每一个值换衣服的时间。 对于领域: 自定义设置器确保compoundKey始终
我已经开始在Android上使用Realm了。到目前为止,我很喜欢它,但我在试图理解如何正确使用“copyToRealmOrUpdate”时遇到了一些问题。 每次打开应用程序时,我都会收到一个带有X“contacts”的JSON(我正在将它映射到Contact RealmObject数组中),如果它们不存在,我想将它们插入Realm DB,或者在它们存在时更新它们。 这里的问题是,每次我这样做时,
问题内容: 启动应用程序时,我将执行API调用以查看是否有可用的新数据。数据存储在我的本地Realm数据库中,其中一些显示在初始表视图控制器中。 API调用完成后,我将检查是否满足某些条件,这些条件要求我从数据库中删除一堆先前的数据,然后创建新对象。但是,当我删除旧数据时,我的应用程序崩溃,但出现以下异常: 该调用堆栈让我假设,这是由于我在FavoriteLeaguesViewController
我刚到Spring 我尝试使用spring rest api和Hibernate更新Mysql中的一个现有值。但它每次都会抛出一个错误。 错误消息:
我在Postgres中有两个表<code>foo 当我尝试使用此命令将数据从 复制到 时: 我得到一个错误: 错误:重复的键值违反了唯一约束“bar_pkey” 详细信息:键(id)=(1)已存在。 当表