Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 Spring Boot@DataJpaTest,不生成ddl_Java_Hibernate_Unit Testing_Spring Boot_Spring Data Jpa - Fatal编程技术网

Java Spring Boot@DataJpaTest,不生成ddl

Java Spring Boot@DataJpaTest,不生成ddl,java,hibernate,unit-testing,spring-boot,spring-data-jpa,Java,Hibernate,Unit Testing,Spring Boot,Spring Data Jpa,我有两个数据库中带有表的MySQL,我想用SpringBoot 1.5.6.RELEASE和JPA编写一个测试。为此,我将@DataJpaTest与@EntityScan一起使用,因为实体位于两个不同的包中。作为测试的嵌入式数据库,我使用H2 我的第一个问题是,SpringBoot抛出了一个异常,即找不到模式,因此我创建了一个schema.sql,其中包含两个CREATESCHEMA IF not EXISTS语句,如所述。 但是,我还想插入一些测试数据并添加一个data.sql文件。现在的问题

我有两个数据库中带有表的MySQL,我想用SpringBoot 1.5.6.RELEASE和JPA编写一个测试。为此,我将@DataJpaTest与@EntityScan一起使用,因为实体位于两个不同的包中。作为测试的嵌入式数据库,我使用H2

我的第一个问题是,SpringBoot抛出了一个异常,即找不到模式,因此我创建了一个schema.sql,其中包含两个CREATESCHEMA IF not EXISTS语句,如所述。 但是,我还想插入一些测试数据并添加一个data.sql文件。现在的问题是,Spring boot首先执行schema.sql,然后执行data.sql,然后再执行Hibernate创建表,最终导致空表。为了解决这个问题,我尝试在application.properties中设置spring.jpa.hibernate.ddl auto=none。然而,Hibernate现在开始切换命名策略,并将camelCase转换为sleek_case,这再次导致了错误。所以我想,这不是应该怎么做的。我还尝试了spring.jpa.generateddl=false,但没有任何效果。 如何仅使用schema.sql和data.sql并同时使用@DataJpaTest停用自动DDL生成

多谢各位

解决方案1:属性/yaml文件 解决方案2:重写@Bean 注意,application.properies或application.yaml应该在test/resources下,测试应该使用带有@Bean的@Configuration类

用于通过sql文件进行测试,您可以使用

我的

解决方案1:properties/yaml文件中有一些示例 解决方案2:重写@Bean 注意,application.properies或application.yaml应该在test/resources下,测试应该使用带有@Bean的@Configuration类

用于通过sql文件进行测试,您可以使用


在my

中有一些示例,您可以创建另一个application.properties并在测试目录下为其配置文件


对于其他问题,请在数据库创建后使用flyway flyway脚本,这是您的插入脚本自动运行。

您可以在测试目录下创建另一个application.properties并配置文件


对于其他问题,请在数据库创建后使用flyway flyway脚本,该脚本是您的插入脚本,将自动运行。

谢谢您的回答。正如我在问题中提到的,设置ddl auto=none不起作用。你的第三个解决方案不是我的问题的目的。然而,我发现将spring.jpa.hibernate.naming.physical strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl添加到``ddl auto=none`中似乎是一种可以接受的解决方法。如果你相应地改变了你的第一个和第二个答案,我可以把它标记为接受答案。不幸的是,您的github链接没有帮助,您可以提供更具体的链接吗?非常感谢。将GitHub链接更改为测试存储库示例。您的答案仍然与我的问题不对应。我既不使用liquibase也不使用HSQLDB,您的描述解决方案对我不起作用。有效的解决方法是设置spring.jpa.hibernate.naming.physical strategy=org.hibernate。‌​boot.model.naming.Ph‌​物理模拟策略‌​StandardImpl和ddl auto=none谢谢您的回答。正如我在问题中提到的,设置ddl auto=none不起作用。你的第三个解决方案不是我的问题的目的。然而,我发现将spring.jpa.hibernate.naming.physical strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl添加到``ddl auto=none`中似乎是一种可以接受的解决方法。如果你相应地改变了你的第一个和第二个答案,我可以把它标记为接受答案。不幸的是,您的github链接没有帮助,您可以提供更具体的链接吗?非常感谢。将GitHub链接更改为测试存储库示例。您的答案仍然与我的问题不对应。我既不使用liquibase也不使用HSQLDB,您的描述解决方案对我不起作用。有效的解决方法是设置spring.jpa.hibernate.naming.physical strategy=org.hibernate。‌​boot.model.naming.Ph‌​物理模拟策略‌​StandardImpl和ddl auto=NONE我的测试目录中有一个application.properties文件,我应该如何配置它?您能否更具体地说明如何让flyway与@DataJpaTest协同工作?您可以添加依赖项,也可以添加插件,当您创建一次dbS时,导出创建脚本并填充flyway文件扩展名为.sql。在创建脚本下面添加插入脚本,并设置hibernate ddl auto:none或false此脚本文件在应用程序启动之前运行,并且您的db将在我的测试目录中具有application.properties文件,我应该如何配置它?您能否更具体地说明如何让flyway与@DataJpaTest协同工作?您可以添加依赖项,也可以添加插件,当您创建一次dbS时,导出创建脚本并填充flyway 文件的扩展名已经是.sql。在创建脚本下面,添加插入脚本,并设置hibernate ddl auto:none或false。此脚本文件在应用程序启动之前运行,数据库准备就绪
spring:
 autoconfigure:
  exclude: org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration
 jackson:
  serialization:
   indent_output: true
 datasource:
  driver-class-name: org.hsqldb.jdbcDriver
  generate-unique-name: true
 jpa:
  hibernate:
    ddl-auto: none
  show-sql: true
 h2:
  console:
   enabled: false

liquibase:
 change-log: classpath:/liquibase/db.changelog-master.xml
 drop-first: true
 contexts: QA
@Bean
LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, Environment env) {
    final LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
    factory.setDataSource(dataSource);
    factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
    factory.setPackagesToScan("com.spring.web.demo.persistent.entity");
    factory.setJpaProperties(jpaProperties(env));

    return factory;
}

private Properties jpaProperties(Environment env) {
    final Properties properties = new Properties();
    properties.put("hibernate.dialect", env.getRequiredProperty("hibernate.dialect"));
    //!!!: see here
    properties.put("hibernate.hbm2ddl.auto", "none");

    properties.put("hibernate.show_sql", env.getRequiredProperty("hibernate.show_sql"));
    properties.put("hibernate.format_sql", false);
    properties.put("hibernate.physical_naming_strategy", PhysicalNamingStrategyStandardImpl.class.getName());
    properties.put("hibernate.generate_statistics", true);
    properties.put("hibernate.cache.use_second_level_cache", true);
    properties.put("hibernate.cache.use_query_cache", true);
    properties.put("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory");

    return properties;
}