无法使用Core Data从DynamoDB获取相关项

时间:2013-01-17 15:04:14

标签: ios core-data amazon-dynamodb

我有两个实体,两者之间有一对一的关系。在测试中,我可以创建两个实体,加入并保存它们。数据按预期显示在DynamoDB中,并显示相应的ID以显示两者相关。

然后我尝试将项目检索回来。我对其中一个项目执行获取请求,这些项目会被返回,我可以成功记录它的标识符。但是,如果我尝试记录我希望隐式获取的相关实体的标识符,我会得到以下异常:

2013-01-17 15:00:13.936 DJ[10995:c07] DynamoDBResponse.m|-[DynamoDBResponse connectionDidFinishLoading:]|62|Response Body:
{"__type":"com.amazon.coral.validate#ValidationException","message":"1 validation error detected: Value null at 'key.hashKeyElement' failed to satisfy constraint: Member must not be null"}
2013-01-17 15:00:13.936 DJ[10995:c07] DynamoDBResponse.m|-[DynamoDBResponse connectionDidFinishLoading:]|92|Returned CRC32: 650439770, Calculated CRC32: 650439770
2013-01-17 15:00:13.937 DJ[10995:c07] AmazonRequestDelegate.m|-[AmazonRequestDelegate request:didFailWithServiceException:]|74|didFailWithServiceException
2013-01-17 15:00:13.937 DJ[10995:c07] DynamoDBWebServiceClient.m|-[DynamoDBWebServiceClient invoke:rawRequest:unmarshallerDelegate:]|131|Response Status Code : 400
2013-01-17 15:00:13.938 DJ[10995:c07] AmazonErrorHandler.m|+[AmazonErrorHandler errorFromExceptionWithThrowsExceptionOption:]|51|WARNING: An exception was thrown. Please call [AmazonErrorHandler shouldNotThrowExceptions] to change this behavior.
2013-01-17 15:00:13.939 DJ[10995:c07] *** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x7540100 <x-coredata://279744BC-1B25-4170-AF2C-83676954BC3D-10995-00005B7C38D21AFA/Venue/p(null)>''
*** First throw call stack:
(0x1655012 0x147ae7e 0xe6ed8 0xe6887 0xe64c1 0xe6336 0x10b000 0x260c 0x1edc 0x4a3817 0x4a3882 0x3f2a25 0x3f2dbf 0x3f2f55 0x3fbf67 0x3bffcc 0x3c0fab 0x3d2315 0x3d324b 0x3c4cf8 0x24a2df9 0x24a2ad0 0x15cabf5 0x15ca962 0x15fbbb6 0x15faf44 0x15fae1b 0x3c07da 0x3c265c 0x282d 0x1d15)
libc++abi.dylib: terminate called throwing an exception

我尝试过设置:

[request setReturnsObjectsAsFaults:NO];

但结果没有差异。

我没有在初始提取后对数据进行任何更新。我错过了什么吗?

&LT;&LT;编辑1&gt;&gt;

我可以从日志记录中看到,当访问相关对象时,发送到DynamoDB的基础消息具有空键,因此DynamoDB无法获取结果是正确的,但我不明白为什么键没有传输,因为它在数据库中正确列出。

&LT;&LT;编辑2&gt;&gt;

如果我添加一对多的第二个关系并将完全相同的实体添加到其中,则首先访问一对多关系,然后我可以按预期通过一对一关系检索完全相同的对象。 。 。 有没有人得到一个例子,他们已经成功地将DynamoDB用于一对一关系,因为这似乎是一个错误?

2 个答案:

答案 0 :(得分:1)

似乎DynamoDB无法处理null或空字符串值(相反,你根本就没有属性),这可能会打击你。

您可以在应用外进行类似的查询吗?在'控制台'?

答案 1 :(得分:0)

我担心这从未得到解决,但如果有人感兴趣,AWS论坛上会有更详细的帖子 - https://forums.aws.amazon.com/thread.jspa?threadID=114528&tstart=0

最终的结果是我无法获得一对一的关系,在一对多关系中不包含相同的相关实体并首先访问它,即使完全相同的关系在备份到SqlLite时完全按预期工作