当前位置: 首页 > 知识库问答 >
问题:

带有PostgreSQL的HSQLDB:未找到类型或用户缺乏权限:BIGSERIAL

郗唯
2023-03-14

我正在构建Spring+Hibernate Java应用程序。我想添加一些集成测试,在内存数据库中完成。

所以,我的普通数据库是Postgresql,我使用。sql脚本与flyway插件一起运行来填充它。ID字段设置为BigSerial。我想使用内存数据库,以类似于我的原始数据库,然后尝试用它来测试一些类。我设法配置了preety的很多东西(我希望如此),但是当我运行测试类本身时,我在创建表脚本中得到了错误:

<persistence-unit name="testJPA">
        <properties>
            <property name="hibernate.archive.autodetection" value="class, hbm"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
            <property name="hibernate.connection.username" value="sa"/>
            <property name="hibernate.connection.password" value=""/>
            <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:butterfly;sql.syntax_pgs=true"/>
            <property name="hibernate.hbm2ddl.auto" value="create"/>
        </properties>
    </persistence-unit>
@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = {"core.utilities"} )
@EnableTransactionManagement
public class TestsInitializer {
    @Bean
    public LocalEntityManagerFactoryBean entityManagerFactory() {
        LocalEntityManagerFactoryBean factoryBean = new LocalEntityManagerFactoryBean();
        factoryBean.setPersistenceUnitName("testJPA");
        return factoryBean;
    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { TestsInitializer.class }/*, loader = AnnotationConfigContextLoader.class*/)
@Transactional
public class GenreBATest {  
    @Autowired
    private GenreBA genreBA;

    @Test
    public void testFindAllAccounts() {
        //whatever
    }

}

我做错了什么?

共有1个答案

尉迟哲瀚
2023-03-14

好的,我发现flyway运行脚本忽略了persistence.xml中所有可能的语法命令。flyway使用HSQLDB运行,因为我在test configuration类中使用了@enableAutoConfiguration(不排除):)我通过艰苦的方式了解到,Spring Boot已经将Hibernate配置为基于内存中数据库的实体创建模式,所以我根本不需要使用数据库脚本,它们是意外运行的。

 类似资料: