Spring Hibernate - 它是否支持嵌套对象?

时间:2017-04-25 20:45:31

标签: spring hibernate spring-data spring-data-mongodb

我最近问过这个问题: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社区。

1 个答案:

答案 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。