Java Hsqldb不';不能用数据填充
我想在运行此数据源配置时插入sql数据,但无法在测试类中获取数据。如果我首先在测试类中创建数据并获得它,它就会工作Java Hsqldb不';不能用数据填充,java,spring,orm,hsqldb,in-memory-database,Java,Spring,Orm,Hsqldb,In Memory Database,我想在运行此数据源配置时插入sql数据,但无法在测试类中获取数据。如果我首先在测试类中创建数据并获得它,它就会工作 @Configuration @EnableJpaRepositories("se.system.repository") public class DBConfig{ @Bean(name = "hsqldb") public DataSource InMemoryDataSource() { EmbeddedDatabaseBuilder builder = new
@Configuration
@EnableJpaRepositories("se.system.repository")
public class DBConfig{
@Bean(name = "hsqldb")
public DataSource InMemoryDataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase database = builder
.setType(EmbeddedDatabaseType.HSQL)
.addScript("classpath:se/system/sql/create-db.sql")
.setName("database")
.build();
return database;
}
@Bean
public JpaTransactionManager transactionManager(EntityManagerFactory factory) {
return new JpaTransactionManager(factory);
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
adapter.setDatabase(Database.HSQL);
adapter.setShowSql(false);
adapter.setGenerateDdl(true);
return adapter;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setDataSource(InMemoryDataSource());
factory.setJpaVendorAdapter(jpaVendorAdapter());
factory.setPackagesToScan("se.system.model");
return factory;
}
@Bean
public ResourceDatabasePopulator databasePopulator() {
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.setSqlScriptEncoding("UTF-8");
populator.addScript(new ClassPathResource("se/system/sql/insert-data.sql"));
return populator;
}
@Bean
public InitializingBean populatorExecutor() {
return () -> DatabasePopulatorUtils.execute(databasePopulator(), InMemoryDataSource());
}
在testclass中:
@BeforeClass
public static void setUp() throws ServiceException {
try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext()) {
context.scan("se.system");
context.refresh();
userService = context.getBean(UserService.class);
System.out.println(userService.getUserById(1L));
}
Spring将查找要运行的data.sql以及data-${platform}.sql文件。它使用SpringJDBC来实现这一点 尝试将sql文件重命名为data.sql,并相应地调整方法:
populator.addScript(new ClassPathResource("se/system/sql/data.sql"));
而不是
populator.addScript(new ClassPathResource("se/system/sql/insert-data.sql"));
Spring将查找要运行的data.sql以及data-${platform}.sql文件。它使用SpringJDBC来实现这一点 尝试将sql文件重命名为data.sql,并相应地调整方法:
populator.addScript(new ClassPathResource("se/system/sql/data.sql"));
而不是
populator.addScript(new ClassPathResource("se/system/sql/insert-data.sql"));
现在我得到了一个错误:“用户缺少权限或找不到对象:用户”在我尝试用用户填充后,我猜测内存中的数据库在我尝试运行测试时没有保存数据现在我得到了这个错误:“用户缺少权限或找不到对象:用户”在我尝试用用户填充后,我猜当我尝试运行测试时,内存中的db不会持久化数据