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

标签 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;
}

我省略了 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/

相关文章:

java - 每个用户的 Spring RabbitMQ 连接

java - 如何使用 Rest 模板将 TLS1.2 强制执行到 Rest 客户端

scala - Play Framework、REST、路由和 Controller

python - flask Restful : passing parameters to GET request

Spring 3.1 Java 配置 - @Autowired、@Configuration 和@Profile 挑战

spring - Grails 3 - 使用 JSON View 时放心给出 SnippetException 的 Spring Rest 文档

php - PayPal REST API 送货地址不适用于 cURL 请求

java - 如何使用 Spring Boot(服务器端)和 Angular(前端)将 100K 数据加载到表中

java - Spring MVC : Saving a string in servlet-context and accessing from java code

spring - 尝试在我的 WAR 中运行 Spring @Transactional 服务方法时出现 "transaction is not active"