Должна присутствовать хотя бы одна метамодель JPA!, или почему я получаю неправильную фабрику бобов?
Я преобразую приложение Spring Boot для использования модулей Java с помощью Moditect. Я сталкиваюсь с этой проблемой:
java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at spring.core@5.0.7.RELEASE/org.springframework.util.Assert.notEmpty(Assert.java:450)
at spring.data.jpa@2.0.8.RELEASE/org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.<init>(JpaMetamodelMappingContext.java:54)
at spring.data.jpa@2.0.8.RELEASE/org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:90)
at spring.data.jpa@2.0.8.RELEASE/org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:43)
at spring.beans@5.1.0.BUILD-SNAPSHOT/org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:142)
at spring.beans@5.1.0.BUILD-SNAPSHOT/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1778)
at spring.beans@5.1.0.BUILD-SNAPSHOT/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1715)
... 27 more
Похоже, что исключение исходит из этой строки: https://github.com/spring-projects/spring-data-jpa/blob/2.0.x/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java#L54
Я спускаюсь по большой кроличьей норе, пытаясь понять, почему models
пусто при использовании модулей Java, но не когда они не используются. Мой самый важный вывод заключается в том, что в JpaMetamodelMappingContextFactoryBean
Я получаю разные бобовые фабрики в зависимости от того, использую я модули или нет.
В частности, на setApplicationContext
, когда не использую модели, я получаю
[org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@20fd8ce5: startup date [Fri Jul 13 18:53:48 BST 2018]; root of context hierarchy]
в то время как при использовании модулей я получаю
[org.springframework.context.annotation.AnnotationConfigApplicationContext@150c158: startup date [Fri Jul 13 18:40:48 BST 2018]; root of context hierarchy]
Я не совсем то, что делать отсюда. Есть идеи, почему они получат разные классы? Я пытался добавить opens org.springframework.boot.web.servlet.context
но это не помогло