1

我有两个实体,两者之间存在一对一的关系。在测试中,我可以创建两个实体,加入并保存它们。数据按预期显示在 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];

但结果没有区别。

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

<< 编辑 1 >>

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

<< 编辑 2 >>

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

4

2 回答 2

1

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

你能在你的应用之外做一个类似的查询吗?在“控制台”中?

于 2013-01-17T15:30:46.567 回答
0

恐怕这从未得到解决,但如果有人感兴趣的话,AWS 论坛上有一个更详细的主题 - https://forums.aws.amazon.com/thread.jspa?threadID=114528&tstart=0

最终结果是我无法触发一对一关系,除非在一对多关系中包含相同的相关实体并首先访问它,即使在返回 SqlLite 时完全相同的关系完全按预期工作。

于 2013-01-28T16:20:03.860 回答