- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Android 应用程序,它使用 SQLite 及其 json1 扩展作为其数据库后端。虽然这可行,但操作 JSON 所需的 SQL 非常难以理解,甚至更难维护。因此,我目前正在尝试使用 Realm 作为替代方案。虽然 Realm 在很大程度上是直观的,但 LinkingObjects 是一个我并不完全理解的功能。考虑我当前使用的以下类
public class GridNode extends RealmObject
{
@PrimaryKey
private int id = 0;
@Index
private int lx = 0;
@Index
private int ly = 0;
@LinkingObjects("gridnode")
private final RealmResults<PassPoint> passpoints = null;
//getters, setters & constructors
}
public class PassPoint extends RealmObject
{
private GridNode gridnode;//each passpoint refers to one distinct GridNode object
private int hits;
private int lastVisited;
//getters, setters & constructors
}
在我的数据的当前 SQLite 版本中,我通过引用每个 PassPoint
的 AUTO_INCRMENTing id
字段来识别其使用的 GridNode
。有了 Realm,事情就变得简单多了,因为我可以简单地使用 GridNode 本身作为 PassPoint 的属性。
这是事情变得不太清楚的地方。假设我通过运行 RealmQuery 从 Realm
检索现有的 GridNode
,例如
myrealm.where(GridNode.class).equalTo("lx",23).equalTo("ly",32).findFirst();
阅读字里行间,我得出的结论是,运行此查询不仅会获取我想要的 GridNode,还会使用我的
运行隐式查询@LinkingObjects("gridnode")
private final RealmResults<PassPoint> passpoints = null;
用于检索引用相关 GridNode 的所有 PassPoint
对象列表的注释。
非常方便,但我发现自己想知道这是否没有代价 - 运行该查询所需的时间。假设我有一些其他类也引用 GridNodes,在这种情况下我将有进一步的 @LinkingObjets
注释,这将导致进一步的隐式查询?
与此相反,如果我只是简单地记录一个 GridNode id,那么我可以在需要时自己处理识别相关的 GridNode 吗?实际上,是用便利来换取速度和响应能力吗?
或者也许我在字里行间读错了,这根本不是@LinkingObjects 的工作原理?
另一件事不太清楚 - 您会注意到 gridnode
是 PassPoint
类的私有(private)成员。那么我如何能够在我的 GridNode 类中创建 @LinkingObjects("gridnode") 注释,而编译器不会提示我试图访问从不可见的成员在 PassPoint
类之外?
最佳答案
Reading between the lines I have concluded that running this query will not only fetch the GridNode I am after but run an implicit query
没有。不完全是。
正如 Realm 文档所述 here :
All fetches (including queries) are lazy in Realm, and the data is never copied.
这意味着定义查询的简单情况就是这样做的 - 它定义了它。但在用户明确请求之前,它不会评估/执行查询。因此,具有查询字段(例如 LinkingObjects
字段)的对象提供了一种简单的方法,用户可以通过该方法执行查询,但不会仅仅因为对象本身已加载而自动执行查询。它仅在 findFirst
时运行。或findAll
(或类似)调用。
因此,如果您从未真正访问过 GridNode.passpoints
字段,它永远不会被执行。
您可以通过一个简单的实验向自己证明这一点:-
GridNode
来自没有链接的 Realm PassPoint
.Passpoint
到 Realm 并引用相同的GridNode
.Passpoint
.关于第二个问题,简单的答案是模型字段的保护级别仅适用于数据的 Java 模型;它不适用于底层 Realm 模型。
关于java - Realm 中的@LinkingObjects 注解是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59677924/
给定以下示例 Realm 类: 汽车 class Car: Object { dynamic var make = "" let owner = List() } 人 class Pers
根据 Realm Swift 文档,我声明了一些类 Car 和 Tour,如下所示: import RealmSwift class Car: Object { dynamic var id =
我不知道如何在以下情况下使用LinkingObject。 class Message: Object{ ... dynamic fromUser : User?
我有一个 Book 类和一个 ReadingSession 类,其关系声明如下: public class Book: Object { // (…) var readingSessi
我有一个模型,它通过对自身的引用来引用所有对象。我想我可以使用这个属性,LinkingObjects(fromType: Outfit.self, property: "clothes")作为List
我的代码中有 5 个级别(或更多)链接 Realm 对象。项目,包括章节,包括任务,包括附件和... 我在其他一些问题中发现我应该获取链接对象,如下所示: private let sections =
我有一个 Android 应用程序,它使用 SQLite 及其 json1 扩展作为其数据库后端。虽然这可行,但操作 JSON 所需的 SQL 非常难以理解,甚至更难维护。因此,我目前正在尝试使用 R
如果我理解正确的话,那么只有当我访问该属性时才会加载 LinkingObjects?! Lists关系是写在realm数据库里的?! 那么如果我使用列表,对关系的访问会更快吗?也许它会使用更多存储空间
我有一个 Item 数据类,每个 Item 都有一个父项和许多子项,它们是来自父属性的 LinkingObjects。简化版: @objcMembers class Item: Object {
我有一个 Realm 模型类,我需要它是可解码的,这样我就可以从 JSON 序列化它并将它保存到数据库中。每个PortfolioItem与一个 Product 相关联在某些时候我需要去 Portfol
我定义了两个非常基本的 Object 如下: class Language: Object { dynamic var id: String = "" //"english", "chines
更新到 Cocoapods 1.0.0 后,我的 Realm Swift (1.03.1) 架构中出现以下错误。 错误: 使用未解析的标识符“LinkingObjects” 下面的示例: import
我需要列出一个对象的所有 LinkingObjects 类型的属性。 class Dogs: Object { dynamic var name: String = "" dynami
根据Realm documentation for v0.102.0 ,这就是您创建反向关系的方式: 人 class Person: Object { // ... other propert
我目前正在一个测试项目中试用 Realm,我一直在努力从列表中删除特定对象。 LensDBObject和 ListDBObject . LensDBObject 包含镜头列表,ListDBObject
我是 iOS 开发和 Realm 的新手,在代码优先数据库构建方面有不错的经验。 Routine 和 Workout 类之间存在一对多关系,其中一个 Routine 可能包含许多不同的锻炼。这是我的类
When I try to access var `inspection` in code block "Code from version 0.100.0" it returns nil Code
我是一名优秀的程序员,十分优秀!