我最近问过这个问题:Spring Mongodb - Insert Nested document?
并且发现Spring-Data-MongoDB不支持这种行为 - 所以现在我需要一个可行的替代方案。
现在 - 为了避免让你看到另一个页面上的代码,我将把它从其他问题粘贴到这里......这是我的两个POJO:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudwatch:*",
"cognito-identity:ListIdentityPools",
"cognito-sync:GetCognitoEvents",
"cognito-sync:SetCognitoEvents",
"dynamodb:*",
"events:*",
"iam:ListAttachedRolePolicies",
"iam:ListRolePolicies",
"iam:ListRoles",
"iam:PassRole",
"kinesis:DescribeStream",
"kinesis:ListStreams",
"kinesis:PutRecord",
"lambda:*",
"logs:*",
"s3:*",
"sns:ListSubscriptions",
"sns:ListSubscriptionsByTopic",
"sns:ListTopics",
"sns:Subscribe",
"sns:Unsubscribe",
"sns:Publish",
"sqs:ListQueues",
"sqs:SendMessage",
"kms:ListAliases",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups",
"iot:GetTopicRule",
"iot:ListTopicRules",
"iot:CreateTopicRule",
"iot:ReplaceTopicRule",
"iot:AttachPrincipalPolicy",
"iot:AttachThingPrincipal",
"iot:CreateKeysAndCertificate",
"iot:CreatePolicy",
"iot:CreateThing",
"iot:ListPolicies",
"iot:ListThings",
"iot:DescribeEndpoint"
],
"Resource": "*"
}
]
}
现在,我希望能够在这里做什么 - 在我的POST请求中发送一个JSON对象,如下所示:
@Document
public class PersonWrapper {
@Id
private ObjectId _Id;
@DBRef
private Person leader;
@DBRef
List<Person> delegates;
// Getters and setters removed for brevity.
}
public class Person
{
@Id
private ObjectId _Id;
private String name;
// Getters and setters removed for brevity.
}
此时 - 我希望SQL方面创建所需的单个记录 - 然后以最有效的方式插入PersonWrapper记录,并将所有正确的外键插入所需记录。
老实说,如果你们其中一个人认为我对Spring-Data-MongoDB方法有误,我仍然会对这个问题感兴趣 - 因为这样可以省去迁移数据库设置的麻烦。所以我仍然会在这里标记spring-data-mongodb社区。 p>
答案 0 :(得分:0)
如果我理解你想要级联对象的保存?
例如:在delegates属性中保存PersonWrapper和一些Person,spring数据将PersonneWrapper保存在一个集合中,并保存另一个Collection中的Person列表。
如果使用JPA注释@OneToMany注释POJO并设置此注释的级联属性,则可以使用Spring DATA JPA执行此操作。 See this post
然而,Spring DATA mongoDB无法使用级联功能。 See documentation。首先,您必须保存Person列表,然后保存PersonWrapper。