我有一个使用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主体。有没有人对如何做这样的事情提出任何建议?
答案 0 :(得分:1)
好的,我想出了如何启用此功能,使用自定义RepositoryRestMvcConfiguration
类覆盖config()
方法并使用exposeIdsFor()
方法添加到我的域类中。
注意:我使用的是Spring Boot,当我配置自己的配置类时,Spring Boot正在执行的一些自动配置位(包括Jackson Setup)已经破坏。想通了我必须从Spring Data Rest扩展org.springframework.boot.autoconfigure.data.rest.SpringBootRepositoryRestMvcConfiguration
而不是RepositoryRestMvcConfiguration
。