我有一个使用 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;
}
我省略了 getter/setter,但它们在那里。然后我有两个定义对两个实体的访问的 CrudRepository
接口(interface)。在 PersonRepository
上,我定义了一个方法 findByNameAndAddress
。目的是搜索具有给定名称和链接地址的人。问题是我认为我应该在 findByNameAndAddress
查询中传递地址的 Id。但是由于我是通过 REST 客户端执行所有这些操作的,所以我从来没有 id。当我从 AddressRepository
检索地址实体时,SDR 从 JSON 表示中删除了 Id 字段。根据我读过的内容,想法是在引用实体时仅使用 self
链接。
现在,显然,我可以通过解析 self
链接并在查询中使用它来确定 ID 是什么,但这似乎违反了整个 HAL 原则。有没有人对应该如何做这样的事情有任何建议?
最佳答案
好的,我想出了如何启用它,使用自定义 RepositoryRestMvcConfiguration
类来覆盖 config()
方法并使用 exposeIdsFor()
方法添加到我的域类中。
注意:我使用的是 Spring Boot,当我配置自己的配置类时,Spring Boot 正在执行的一些自动配置位(包括 Jackson Setup)损坏了。弄清楚我必须从 Spring Data Rest 扩展 org.springframework.boot.autoconfigure.data.rest.SpringBootRepositoryRestMvcConfiguration
而不是 RepositoryRestMvcConfiguration
。
关于嵌套对象的 Spring 数据休息查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29806361/