Spring Data Rest:嵌套对象未存储在单独的Mongo存储库

时间:2015-05-28 10:03:28

标签: java spring mongodb spring-boot spring-data-rest

我正在玩Spring Data Rest。我无法完成的一件事是将嵌套对象存储在专用存储库中。这是我的两个模型类Person和Address:

@Entity
public class Address {
    @NotEmpty public String  address, email;
    @Id public String id;
}

@Entity
public class Person {
    @Id public String id;
    public String firstName, lastName;
   @OneToOne public Address address;
}

这是我在Spring Boot应用程序中使用的两个Mongo存储库。

@RepositoryRestResource(collectionResourceRel = "person", path = "person")
    public interface PersonRepository extends MongoRepository<Person, String> {}

 @RepositoryRestResource(collectionResourceRel = "address", path = "address")
public interface AddressRepository extends MongoRepository<Address, String> {}

现在,我发出以下帖子请求来创建一个人。     {       &#34; firstName&#34;:&#34;我的名字&#34;,        &#34; lastName&#34;:&#34;我的姓&#34;,        &#34; ID&#34;:&#34; 50e30c24-b8b7-4110-a421-687f67c077d4&#34 ;,        &#34;地址&#34;:{             &#34; ID&#34;:&#34; 8969abf3-17c5-4d7f-bc8c-16dd97808510&#34 ;,             &#34;地址&#34;:&#34; fgfgfg&#34;,             &#34;电子邮件&#34;:&#34; fgfggf&#34;         }     }

此人在Person存储库中创建。当我从存储库中提取人员时,它很好地包含了地址。但是,地址不存储在地址存储库中。相反,它与人员内联存储。

虽然如果我正确理解文档(参见h ttp://docs.spring.io/spring-data/rest/docs/current/reference/html/#projections-excerpts.projections),在这种情况下,因为定义了Person存储库,Person资源应该将地址作为URI呈现给它相应的资源,我认为它将存储在一个单独的存储库中。

所以,问题是我如何将地址存储在一个单独的存储库中?难道这不是所描述的MongoRepository吗?

1 个答案:

答案 0 :(得分:1)

如果您正在使用MongoDB,请不要使用JPA注释。 你想要的两个神奇的注释是:

@org.springframework.data.annotation.Id
@org.springframework.data.mongodb.core.mapping.DBRef

我完全符合上述条件,因此您可以看到其他类似注释之间的区别。

@DBRef告诉Springs MongoDB驱动程序将这些对象存储在一个单独的存储桶中。

以下是您的新课程:

public class Address {
    @NotEmpty public String  address, email;
    @Id public String id;
}

public class Person {
    @Id public String id;
    public String firstName, lastName;
    @DBRef public Address address;
}