java – 使用H2 JPA的Spring启动和JUnit导致找不到’pg_class’

我目前有一个
spring boot应用程序,它包含2个配置文件:application.yaml和application-test.yaml.正确加载应用程序测试配置文件,该文件中的任何设置都按预期工作.

但是我遇到一个问题,特别是spring.jpa.hibernate.ddl-auto =’update’.当在application.yaml文件中定义此设置时,它会导致我的JPA单元测试失败,并且“找不到”表“PG_CLASS”.
我尝试在应用程序测试配置文件中使用不同的值覆盖此设置无济于事.

我的完整配置文件如下:

application.yaml

#Configure Postgres backend datasource
spring.datasource.driverClassName: org.postgresql.Driver
spring.datasource.url: jdbc:postgresql://ec2-54-75-233-146.eu-west-1.compute.amazonaws.com:5432/xxxx?user=xxxx&password=xxxxx&sslmode=require
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
spring.jpa.database-platform: org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto: update

应用test.yaml

spring.datasource.usernam: sa
spring.datasource.url: jdbc:h2:mem:tests;DB_CLOSE_DELAY=-1;MODE=PostgreSQL;DB_CLOSE_ON_EXIT=FALSE;
spring.datasource.driverClassName: org.h2.Driver
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_default: false
spring.jpa.database-platform: org.hibernate.dialect.H2

取消注释application.yaml文件中的“spring.jpa.hibernate.ddl-auto:update”设置可以解决问题.但我想保持这一点.有任何想法吗?

最佳答案 上面的错误似乎是由Hibernate使用错误的方言(PostgreSQL而不是H2)引起的.

也许尝试在application-test.yaml中添加以下内容:

spring.datasource.driverClassName: org.h2.Driver
spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.H2Dialect
点赞