当前位置: 首页 > 面试题库 >

核心数据:3表联接?

邓鸿雪
2023-03-14
问题内容

我知道核心数据不是数据库,并且有很多差异。是这个吗?

在数据库中,我通常有以下内容

A->> B->> C

“ A”有很多“ B”,其中有很多“ C”

查询“给我所有具有c.attr =’X’的A可以很容易地写成:

select * from a, b, c where a.id = b.aid and b.id = c.bid and c.attr = 'X'

在Core Data中,我想做同样的事情,但是要使用类似这样的谓词:

NSPredicate *predicate = 
  [NSPredicate predicateWithFormat:@"ANY bs.cs.attr = %@", "X"];
[frequest setEntity:entityA];
[frequest setPredicate:predicate];

这样做会导致错误:“ NSInvalidArgumentException”,原因:“此处不允许使用多对多键”

我的解释正确吗,意思是什么数据库都限制了多表联接?

我四处搜寻,找不到明确的答案。

我当前对该查询的解决方案如下:

NSPredicate *predicate = 
  [NSPredicate predicateWithFormat:@"ANY cs.attr = %@", "X"];
...
NSArray *bs = //execute fetch
for (B *b in bs) {
  //add b.a into an array
}
//return array

有没有更好的办法?预先感谢您的考虑。


问题答案:

您对此倒退了。

首先,您不需要Core Data中的链接ID,因为所有相关对象已通过该关系链接。这意味着where a.id = b.aid and b.id = c.bid根本不需要类似的构造。

其次,通常为接收定义测试的实体设置获取实体。在这种情况下,就是c.attr="X"这样,您将提取实体设置为C,则谓词应类似于:

NSPredicate *p=[NSPredicate predicateWithFormat:@"attr=%@",xValue];

这将返回所有C符合测试条件的实例的数组。然后找到任何特定的问题BA只是寻求每个关系的问题C

如果您的逆关系是一对一的,例如A <->> B <->> C,则您只要求每个都C提供b.aso的值:

AObject *anA = aCinstance.b.a;

重要的是要记住您不在这里处理表。您正在处理对象图。您将提取设置为特定实体,然后遍历过滤后的实体之间的关系。



 类似资料:
  • 问题内容: 不幸的是,新的Core Data语义使我发疯。我之前的问题有一个干净的代码,因为头文件的自动生成不正确,因此无法正常工作。现在,我继续删除对象的工作。我的代码似乎很简单: 我用代替进行了“硬”调试,它向我展示了正确的对象。所以我只需要删除它。 PS没有。现在NSManagedContext只有 问题答案: 在您的情况下,提取的结果是托管对象 的 数组,因此您可以枚举该数组并删除所有匹配

  • Kubernetes主要由以下几个核心组件组成: etcd保存了整个集群的状态; apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制; controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等; scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上; kubelet负责维护容器的生命周期,同时也

  • 当从查询字符串提取的模型将字典作为其属性之一时,Swagger生成错误的URL。如何告诉Swagger更改URL中字典的格式或手动定义输入参数模式,而不自动生成?试图使用Swashbuck和NSwag。 控制器 输入模型-查询字符串 Swagger UI为查询模型的“条件”属性显示了这种格式 Swagger生成的URL-Open API v2-将不会绑定到“条件” Swagger生成的URL-Op

  • 我有一个地址模型,它适用于我系统中的所有模型,如下所示: 在OnModelCreating中: 它的工作非常好!我唯一的问题是关于级联删除。如何设置此方案: 删除某人时,级联删除PersonalAddress和Addresses 删除地址时,级联删除PersonalAddress而不是Person 目前我看到删除Person会删除Person地址(但不会删除相关地址)。 我并不是在抱怨这种行为,但

  • 我正在开发一个以时事通讯风格界面为中心的iPad应用程序。我使用苹果的UIPageViewController来做到这一点。 我遇到了很多我不完全理解的错误,我希望有人能帮助我找到解决方法。 在这个界面上翻页时,应用程序偶尔会冻结(这就是为什么它如此令人沮丧,因为它不容易复制)。我在调试器中暂停应用程序,这是它显示给我的http://cl.ly/image/1y3c2x351t0T. 我很清楚这是

  • 链接 3.1 请求 3.2 响应 3.3 IOC 3.4 中间件 3.5 钩子 3.6 配置