spring data rest hateoas动态隐藏存储库

时间:2015-12-10 22:32:48

标签: spring spring-data-rest hateoas

我仍在试图弄清楚究竟是什么问题,但这是办公室讨论的后果。因此,困境在于,在映射集上急切地为映射所针对的实体定义了存储库,会产生链接。有些时候很好,但有些时候我宁愿把对象取出来。如果没有为该实体定义存储库,那么eager fetch策略将会发生这种情况。如果我可以传入一个参数并且该存储库的存在消失或重新出现,那么理想的是什么。

2 个答案:

答案 0 :(得分:1)

不完全跟随,但回购存在与否。如果您希望能够独立于其他实体类型访问X类型的实体,则必须为类型X定义一个repo。

答案 1 :(得分:1)

我认为您可以使用projections实现类似的功能。

因此,您可以为关联实体定义存储库。默认情况下,spring data rest只会呈现指向此实体的链接,而不会将其嵌入到响应中。

然后使用相关实体的getter定义投影。如果您想通过添加projection查询参数来进行投影,则可以在客户端选择。

因此,假设您有一个拥有地址的人 - 存在人员和地址的导出存储库:

@Entity
public class Person {

  @Id @GeneratedValue
  private Long id;
  private String firstName, lastName;

  @OneToOne
  private Address address;
  …
}


interface PersonRepository extends CrudRepository<Person, Long> {}


interface AddressRepository extends CrudRepository<Address, Long> {}

您的预测可能如下所示:

@Projection(name = "inlineAddress", types = { Person.class }) 
interface InlineAddress {

  String getFirstName();

  String getLastName();

  Address getAddress(); 
}

如果你打电话给http://localhost/persons/1?projection=inlineAddress,你就会嵌入地址 - 默认情况下它只是链接的。