gpt4 book ai didi

java - HSQLDB 与 Postgresql : type not found or user lacks privilege: BIGSERIAL

转载 作者:太空宇宙 更新时间:2023-11-04 10:52:06 24 4
gpt4 key购买 nike

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

所以,我的普通数据库是 Postgresql,我使用使用 Flyway 插件运行的 .sql 脚本来填充它。 ID 字段设置为 BIGSERIAL。我想使用内存数据库来类似于我的原始数据库,然后尝试用它测试一些类。我设法配置了几乎所有内容(我希望如此),但是当我运行测试类本身时,我收到 CREATE TABLE 脚本错误:

由以下原因引起:org.hsqldb.HsqlException:找不到类型或用户缺乏权限:BIGSERIAL

我发现我应该配置 HSQLDB,以启用 Postgresql 兼容性。使用 SET DATABASE SQL SYNTAX PGS TRUE 或等效的 URL 属性 sql.syntax_pgs=true 启用 PostgreSQL 的非标准功能。

我使用 persistence.xml 来定义正常和测试持久单元。这是负责定义测试持久性单元的片段:

<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
}

}

我在 URL 末尾添加了所需的属性,在互联网上找到了该属性的示例,但这并不能解决我的问题。

我仍然收到:消息:找不到类型或用户缺乏权限:BIGSERIAL

我做错了什么?

最佳答案

好吧,我发现脚本是由 Flyway 运行的,忽略了 persistence.xml 中所有可能的语法命令。 Flyway 与 HSQLDB 一起运行,因为我在测试配置类中使用了 @EnableAutoConfiguration,没有排除 :) 我通过艰苦的方式了解到 Spring Boot 已经配置 Hibernate 以基于内存数据库的实体创建模式。所以我根本不需要使用数据库脚本,它们是偶然运行的。

关于java - HSQLDB 与 Postgresql : type not found or user lacks privilege: BIGSERIAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47702513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com