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