- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
按照官方文档指南:Realm Relationships
我试着写了一些多对一关系的代码,发现有些地方不一致。
两个POJOContace.java
和Email.java
定义如下:
public class Email extends RealmObject {
private String address;
private boolean active;
// ... setters and getters left out
}
public class Contact extends RealmObject {
private String name;
private Email email;
// ... setters and getters left out
}
情况一:创建一个普通的Email
对象,并分配给不同的Contact
contactA和contactB。
Email email = new Email();
email.setAddress("realm_test@gmail.com");
email.setActive(true);
Contact contactA = new Contact();
contactA.setName("Bear");
contactA.setEmail(email);
Contact contactB = new Contact();
contactB.setName("Monkey");
contactB.setEmail(email);
realm.beginTransaction();
realm.copyToRealm(contactA);
realm.copyToRealm(contactB);
realm.commitTransaction();
在我调用realm.copyToRealm()
之后,将在此处创建两个Email
对象。那么,当我从 Realm 查询 Contact
时,一个 Email
对象会变成两个不同的对象吗?我认为这不再是多对一的关系,它只是变成了一对一的关系。
情况二:调用realm.createObject()
创建一个代理Email
对象和两个代理Contact
对象,并将电子邮件分配给 contactA 和 contactB。
realm.beginTransaction();
Email email = realm.createObject(Email.class);
email.setAddress("realm_test@gmail.com");
email.setActive(true);
Contact contactA = realm.createObject(Contact.class);
contactA.setName("Bear");
contactA.setEmail(email);
Contact contactB = realm.createObject(Contact.class);
contactB.setName("Monkey");
contactB.setEmail(email);
realm.commitTransaction();
在这里我们可以看到表中只有一个电子邮件对象,这正是我所期望的,正如上面文档中所描述的那样。
那么,为什么situation1和situation2不一致呢?是situation1中的错误吗?还是我遗漏了什么?
Realm 版本:0.88.3
Android Studio 版本:2.0
期待您的回复!谢谢!
最佳答案
感谢beeender这里的答案:[issue-2730]
This is the expected behaviour.
In the situation1, the email you set to contactA and contactB is a standalone object which is not managed by Realm. So when you copy it to Realm, Realm has no way to know you mean they are the same object. To solve this, you can add a @PrimaryKey to Email and then use copyToRealmOrUpdate. Realm will try to detect if you mean the same email object for both contactA and contactB based on the primary key.
In the situation2, since the email object is managed by Realm, when you call setters, Realm knows that email is actually the same one.
最后我在Contact
和Email
中都设置了一个@PrimaryKey
,如下:
public class Email extends RealmObject {
@PrimaryKey
private String address;
private boolean active;
// ... setters and getters left out
}
public class Contact extends RealmObject {
@PrimaryKey
private String name;
private Email email;
// ... setters and getters left out
}
然后将 contactA 和 contactB 上的 copyToRealm()
更改为 copyToRealmOrUpdate()
。
realm.beginTransaction();
realm.copyToRealmOrUpdate(contactA);
realm.copyToRealmOrUpdate(contactB);
realm.commitTransaction();
并且 Contact
和 Email
之间的关系在情况 1 中是正确的。
关于android - Realm 关系 : Many-to-One, 中的问题会创建重复对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36915559/
我有模特儿 class Category(models.Model): title = models.CharField(...) entry
我确实有一个“引用”表和一个“文章”表,其中一篇文章引用了其他文章。 我确实有一些简单的引用资料,例如:A -> B SQL: select ab.* from Article a inner joi
我目前正在研究发布有界上下文。这方面的主要参与者是产品 和 上市 . 产品:可以在多个市场上列出。一 产品 许多 上市 . 列表:可以有很多产品,因为某些市场支持变体列表。一 上市 许多 产品 . 基
我有一个简单的化妆品数据库。每个产品可能包含多种成分。因此它是一个简单的多对多关系,目前我有一个这样的数据库: CREATE TABLE `products` ( `id` INT UNSIGNE
我只是在学习 django 并遵循教程。我有一个链接和一个书签。与我正在关注的教程不同,我希望一个链接只与一个书签相关联,但一个书签可以有多个链接。这是设置模型的方法吗? class Link(mod
我有 3 个表;用户、组和权限 在模型中,我将关系设置为 belongsToMany在用户模型中: public function groups() { return $this->belon
与 Laravel 4 中的一个问题作斗争,在“联系”模型编辑表单中,我可以获得所有字段的当前值,除了与另一个模型“公司”建立关系的多重选择中的那些。这是一个多对多的关系。我正在获取公司列表,但即使存
我正在制作现有数据库的模型。我的表通过连接表具有多对多的自引用。连接表有两个字段:“parent_id”和“child_id”。 我正在尝试这样定义关联: company.hasMany(co
据我所知 查找表当我们处理 时是必要的多对多 关系。 但是呢?一对多关系 - 我们需要 查找表或 外键 在其中一张 table 上? 另一个问题,是一对多同 多对一 ? 最佳答案 一对多关系不需要查找
当我启动服务器时,在建立数据库连接后不久,我会这样做: var tool = require("./tool"); //created with Sequelize.define() var requ
对不起,如果标题没有多大意义,如果您对我的问题的更准确描述有建议,请提出建议。 我正在开发一个 Symfony 2 应用程序,我有必须与另一个用户相关的用户对象,简单的用例是 friend ,但也有更
这可能只是因为我缺乏对 EF Code First fluent API 的了解,但我很困惑。 我想模拟以下内容: 一个包含 Id 和 Name 的Groups集合 一个包含 Id 和 Name 的U
在关系数据库中,我有一个用户表、一个类别表和一个执行多对多关系的用户类别表。 这个结构在Redis中是什么形式的? 最佳答案 对于 Redis,关系通常由集合表示。一套可以用表示单向关系,因此每个对象
我正在为我的数据库使用 MySQL,并且在我的 Django 应用程序中有以下 Message 模型: class Message(models.Model): sender = models
我有这种情况,但我不确定应该如何在数据库中对其进行建模。我试图建模的对象是:球队、球员、球队球员的成员资格,以及给定球队中每个球员的应付费用列表。因此,费用取决于球队和球员。 因此,我目前的做法如下:
我有一个实体 Book,它与其他实体的关系太多。现在我想对多对多关系属性之一的 COUNT 列进行排序,我使用这种方法 Doctrine2 order by count many to many Do
必须改变实体之间的关系,我想知道改变关联映射类型是否正常,数据库中已经存在的数据是否会正常传输?我试图找到有关它的信息,但没有找到。或者如果映射将被更改,则必须通过 sql 查询手动传输已经存在的数据
我有一个丑陋的循环,它在 Django 中作为创可贴运行,我想将其优化为连接。我已将其分解为最基本的结构,以帮助简化问题。我希望其他人以前遇到过类似的问题 - 如果没有,我会在最终修复它时分享答案。
我想使用 Spring Boot 和 Spring Data REST 构建一个简单的 HATEOAS API。 因此,我创建了2个不同的实体A和B。两者之间存在多对多关系。由于该关系还需要 2 个属
我有两个名为“类别”和“文章”的实体,它们具有多对多关系。我想形成一个谓词来搜索 category.name 等于某个值的所有文章。我有以下内容: NSEntityDescription *ent
我是一名优秀的程序员,十分优秀!