嵌套对象的spring数据休息查询

时间:2015-04-22 18:47:18

标签: spring rest spring-mvc jpa

我有一个使用JPA作为底层实现的Spring Data REST应用程序。我有一个类似于以下的数据模型:

@Entity
public class Person {

  @Id
  private Long id;
  private String name;

  @ManyToOne
  private Address address;

}

@Entity
public class Address {

  @Id
  private Integer id;
  private String street;
  private String city;
  private String state;
  private String zip;

  @OneToMany(mappedBy = 'address')
  private List<Person> people;
}

我遗漏了吸气剂/安装者,但他们在那里。然后,我有两个CrudRepository接口,用于定义对两个实体的访问。在PersonRepository上,我定义了一个方法findByNameAndAddress。目的是搜索具有给定名称且具有链接地址的人员。问题是我认为我应该在findByNameAndAddress查询中传递地址的Id。但由于我通过REST客户端完成所有这些操作,因此我从未拥有过id。当我从AddressRepository检索地址实体时,SDR从JSON表示中删除Id字段。根据我所读到的,我的想法是在引用实体时仅使用self链接。

现在,显然,我可以通过解析self链接并在查询中使用它来确定ID是什么,但这似乎违反了整个HAL主体。有没有人对如何做这样的事情提出任何建议?

1 个答案:

答案 0 :(得分:1)

好的,我想出了如何启用此功能,使用自定义RepositoryRestMvcConfiguration类覆盖config()方法并使用exposeIdsFor()方法添加到我的域类中。

注意:我使用的是Spring Boot,当我配置自己的配置类时,Spring Boot正在执行的一些自动配置位(包括Jackson Setup)已经破坏。想通了我必须从Spring Data Rest扩展org.springframework.boot.autoconfigure.data.rest.SpringBootRepositoryRestMvcConfiguration而不是RepositoryRestMvcConfiguration