Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 必须至少存在一个JPA元模型_Java_Spring_Spring Boot_Spring Data Jpa - Fatal编程技术网

Java 必须至少存在一个JPA元模型

Java 必须至少存在一个JPA元模型,java,spring,spring-boot,spring-data-jpa,Java,Spring,Spring Boot,Spring Data Jpa,我在测试控制器类时遇到此异常 Caused by: java.lang.IllegalArgumentException: At least one JPA metamodel must be present! at org.springframework.util.Assert.notEmpty(Assert.java:450) at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.<init

我在测试控制器类时遇到此异常

Caused by: java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
    at org.springframework.util.Assert.notEmpty(Assert.java:450)
    at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.<init>(JpaMetamodelMappingContext.java:54)
    at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:88)
    at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:43)
    at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:141)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1761)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1698)
我的引导类

@SpringBootApplication(scanBasePackages = "com.javadroider")
@RestController
@EntityScan("com.javadroider.notifier.commons.model")
@EnableJpaRepositories(basePackages = "com.javadroider.notifier")
public class NotifierApplication {

    @GetMapping("/")
    public String home(){
        return "Welcome to Notifier";
    }

    public static void main(String[] args) {
        SpringApplication.run(NotifierApplication.class, args);
    }
}   
我的依赖项是这样的

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = {SensorController.class}, secure = false)
public class SensorControllerTest {

    @Autowired
    private MockMvc mvc;

    @MockBean
    private SensorService sensorService;

    .....
}
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
            <scope>runtime</scope>
        </dependency>
</dependencies>

org.springframework.boot


没有解决我的问题

注释
@WebMvcTest不会为您自动配置任何存储库或JPA层bean,因为它主要集中于测试控制器级别

您的主类NotifierApplication尝试执行太多操作。有关良好编程实践,请参见单一责任原则:

main类应该仅用于定义应用程序,它本身不应该是
@RestController
。例如,创建一个单独的类NotifierController,并使其成为您的
@RestController
,其中定义了端点:

@RestController 
public class NotifierController {

    @GetMapping("/")
    public String home(){
        return "Welcome to Notifier";
    }

}
并将其与您的主要课程分开:

@SpringBootApplication(scanBasePackages = "com.javadroider")
@EntityScan("com.javadroider.notifier.commons.model")
@EnableJpaRepositories(basePackages = "com.javadroider.notifier")
public class NotifierApplication {

    public static void main(String[] args) {
        SpringApplication.run(NotifierApplication.class, args);
    }
} 

它失败的原因是,由于主类上的注释,您的WebMvcTest试图扫描JPA存储库和实体,但这不是为WebMvcTest配置的。

请添加您正在使用的依赖项看看这个:@MehrajMalik的可能重复并没有解决我的问题。