我正在玩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吗?
答案 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;
}