是否可以使用Spring Data Rest为同一JPA实体发布两个不同的存储库? 我为这两个存储库提供了不同的路径和rel-name,但只有两个中的一个可用作REST端点。 我有两个存储库的原因是,其中一个是摘录,仅显示实体的基本字段。
答案 0 :(得分:11)
可怕的部分不仅是你每个实体只能有1个弹簧数据库(@RepositoryRestResource),而且也如果你有一个普通的JPA @Repository(比如CrudRepository或PagingAndSorting)它还将与spring数据交互一个(因为map中的键是Entity本身)。 调试一个或另一个的随机负载失去了几个小时。我想如果这是弹簧数据的一个硬限制,那么如果在尝试覆盖该值时地图的键已经存在,则至少可以抛出异常。
答案 1 :(得分:1)
答案似乎是:每个实体只有一个存储库。
答案 2 :(得分:1)
我最终使用@Subselect
创建了第二个不可变实体,并将其绑定到第二个JpaRepsotory并将其设置为@RestResource(exported = false)
,这也鼓励了关注点的分离。
员工榜样
@Entity
@Table(name = "employee")
public class Employee {
@Id
Long id
String name
...
}
@RestResource
public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Long> {
}
@Entity
@Immutable
@Subselect(value = 'select id, name, salary from employee')
public class VEmployeeSummary {
@Id
Long id
...
}
@RestResource(exported = false)
public interface VEmployeeRepository extends JpaRepository<VEmployeeSummary, Long> {
}
上下文
单片应用程序中的两个软件包有不同的要求。需要在包含CRUD函数的PagingAndSortingRepository
中公开用于UI的实体。另一个是用于聚合后端报告组件,而无需分页但可以排序。
我知道我可以在请求Pageable.unpaged()
之后从PagingAndSorting存储库中过滤结果,但是我只想要一个基本JPA存储库,该存储库返回List
来进行某些过滤。