如何在spring-data-jpa(2x)+ spring-rest-webmvc中选择MappingContext?

时间:2014-05-20 15:07:36

标签: spring-data spring-data-jpa spring-data-rest

我有一个模块A,它通过用户,组和相关类提供身份验证。此模块使用org.springframework.data:spring-data-jpa:1.6.0.RELEASE从数据库访问此数据。值得注意的是,模块A使用通过扩展JpaRepositoryFactoryBean配置的自定义BaseRepository,但删除它不能解决下面的问题。

第二个模块B还有一些要管理的类和存储库,与模块A类无关,再次使用spring-data-jpa进行存储,但连接到不同的数据库。该项目使用org.springframework.data:spring-data-rest-webmvc:2.1.0.RELEASE通过REST公开它的存储库。模块B使用模块A中的类来验证用户,但不操纵那些类实例,也不存储任何引用。

我现在遇到的问题是,当模块A不存在时(或者旧版本尚未使用spring-data-jpa),我的模块B REST API可以完美运行,但是当我出现它时打破使用下面的stacktrace创建自引用链接:

java.lang.IllegalArgumentException: Cannot create self link for class Document! No persistent entity found!
at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.getSelfLinkFor(PersistentEntityResourceAssembler.java:81) ~[spring-data-rest-webmvc-2.1.0.M1.jar:na]
at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.toResource(PersistentEntityResourceAssembler.java:64) ~[spring-data-rest-webmvc-2.1.0.M1.jar:na]
at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.toResource(PersistentEntityResourceAssembler.java:32) ~[spring-data-rest-webmvc-2.1.0.M1.jar:na]
at org.springframework.data.web.PagedResourcesAssembler.createResource(PagedResourcesAssembler.java:144) ~[spring-data-commons-1.8.0.M1.jar:na]
at org.springframework.data.web.PagedResourcesAssembler.toResource(PagedResourcesAssembler.java:96) ~[spring-data-commons-1.8.0.M1.jar:na]
at org.springframework.data.rest.webmvc.AbstractRepositoryRestController.entitiesToResources(AbstractRepositoryRestController.java:220) ~[spring-data-rest-webmvc-2.1.0.M1.jar:na]
at org.springframework.data.rest.webmvc.AbstractRepositoryRestController.resultToResources(AbstractRepositoryRestController.java:207) ~[spring-data-rest-webmvc-2.1.0.M1.jar:na]
at org.springframework.data.rest.webmvc.RepositoryEntityController.getCollectionResource(RepositoryEntityController.java:135) ~[spring-data-rest-webmvc-2.1.0.M1.jar:na]

另请参阅:https://github.com/spring-projects/spring-data-rest/blob/master/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PersistentEntityResourceAssembler.java#L80

即使我的MappingContext包含来自模块A和模块B的所有repositoryBeanNames,它看起来正在与RepositoryFactoryBeanSupport中的错误org.springframework.data.repository.support.Repositories进行对话。

有没有人知道如何强制使用特定的MappingContext,可能是通过RepositoryRestMvcConfiguration的扩展?

** 修改 **
这是一个说明问题的GitHub存储库:
https://github.com/timtebeek/dual-data-jpa-rest-webmvc

此后被报告为数据休息项目的错误:
https://jira.spring.io/browse/DATAREST-312

1 个答案:

答案 0 :(得分:0)

今天发生在我身上

我试图查询特定的实体

我修复了它创建该类的存储库

在你的情况下,它将是

@Repository
public interface DocumentRepository extends JpaRepository<Document, Long> {
}

还执行所有必需的配置以使用jpa存储库。 Look here

我希望是这样。