有一个用例我正在努力使用SDR,如下所示 -
这是用户表和RefSecQuestion表
User -> ManyTOOne -> RefSecQuestion , RefSecQuestion -> OneToMany -> User
这是User Table和UserFriends表
User -> OneToMany UserFriends , UserFriends -> ManyToOne -> User
当我去/ users / {id} / userFriends时,要求 然后默认显示来自UserProjection的firstname,lastname等
结果,我在UserRepository中启用了excerptProjection,它运行正常。 我希望这里有大约100个结果,如果这个结果没有分页,那就没问题了。
但是,既然RefSecQuestion也与User有关,那么当我走的时候会发生什么 / refSecQuestions - >此页面挂起,因为它试图用UserProjection替换用户链接。对于大多数用户而言,RefSecQuestion表存在一个问题,因此会因分页丢失而导致页面中断。
因为我不能在这里选择单向性,因为两个网址都是必需的,即
/users/{id}/userFriends
/refSecQuestions/users
我发现最接近的答案是选择单向性,即我在RefSEcQuestion中为用户设置Rest Export为false
答案 0 :(得分:5)
最后,我能够获得所需的结果,并在此发布给所有SDR用户。 我希望在此网址中加入分页 - 其中User - >一对多 - > UserLanguages
/users/{id}/userLanguages
现在使用默认SDR配置,嵌入式资源不会被分页,因此我必须手动公开它们,并且下面的解决方法仍然需要非常少的代码行 -
@RestController
public class MainController {
@RequestMapping(value = "/users/{id}/userLanguages", method = RequestMethod.GET)
@PreAuthorize("permitAll")
public ModelAndView findUserLanguages(@PathVariable Integer id) {
ModelAndView model = new ModelAndView("forward:/userLanguages/search/findByUserId?userId=" + id);
return model;
}
然后,在UserLangRepository
中public interface UserLanguageRepository extends BaseRepository<UserLanguage, Integer> {
Page<UserLanguage> findByUserId(@Param("userId") Integer userId, Pageable pageable);
}
此处名称findByUserId遵循Spring Data Query Derivation规则,其中UserLanguage中有用户列,User中有id列。 然后对以下URL进行分页并具有其他选项,例如排序,大小等。
http://localhost:8585/MYAPP/users/3/userLanguages
然而,有一个问题是next和prev链接指向转发链接..