我在我的 Spring Boot 應用程式中集成了 Liquibase。將它與 MariaDB 一起使用效果很好。
對于單元和集成測驗,我使用 H2 記憶體資料庫。在運行測驗時,它會導致以下例外:
org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [select user0_.id as id1_19_0_, user0_.created_at as created_2_19_0_, user0_.updated_at as updated_3_19_0_, user0_.version as version4_19_0_, user0_.activated as activate5_19_0_, user0_.birthday as birthday6_19_0_, user0_.email as email7_19_0_, user0_.firstname as firstnam8_19_0_, user0_.force_password_change as force_pa9_19_0_, user0_.password_hash as passwor10_19_0_, user0_.role as role11_19_0_, user0_.surname as surname12_19_0_ from users user0_ where user0_.id=?]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:259) ~[spring-orm-5.3.19.jar:5.3.19]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:233) ~[spring-orm-5.3.19.jar:5.3.19]
我的產品配置(作業):
spring:
main:
allow-bean-definition-overriding: true
datasource:
url: jdbc:mariadb://localhost:3307/testdb
username: user
password: psw
jpa:
generate-ddl: false
database-platform: org.hibernate.dialect.MariaDB103Dialect
sql:
init:
mode: never
liquibase:
enabled: true
change-log: classpath:db/db.changelog-master.yaml
我的測驗配置(不作業):
spring:
main:
allow-bean-definition-overriding: true
datasource:
url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;NON_KEYWORDS=user
username: sa
driver-class-name: org.h2.Driver
password: password
jpa:
database-platform: org.hibernate.dialect.H2Dialect
generate-ddl: false
sql:
init:
mode: never
liquibase:
change-log: classpath:db/db.changelog-master.yaml
enabled: true
test:
database:
replace: none
我嘗試了什么:
- 多個 url 配置,包括
NON_KEYWORDS來自 H2 的選項,用于排除用戶問題,因為它可能被解釋為關鍵字。
由于它與 MariaDB 一起使用,我認為這是與 H2 相關的問題。
感謝您提供任何幫助,檔案,鏈接任何內容:)
uj5u.com熱心網友回復:
您已將 h2 url 設定為此字串:
datasource:
url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;NON_KEYWORDS=user
username: sa
driver-class-name: org.h2.Driver
password: password
在此處鏈接的檔案中,您可以看到他們的設定與使用 spring boot 和 h2 略有不同:
默認情況下,Spring Boot 將應用程式配置為使用用戶名 sa 和空密碼連接到記憶體存盤。
但是,我們可以通過將以下屬性添加到 application.properties 檔案來更改這些引數:
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
由于錯誤最終參考了休眠 URL,并且唯一的更改是添加了 h2 資料集,因此我搜索了 spring boot 和 h2 以查找檔案。
uj5u.com熱心網友回復:
實際上,問題出在我的架構上。由于 H2 不支持 MariaDB 的某些功能,因此它無法啟動,因此 jpa 無法準備 SQL 陳述句,因為表不存在。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468320.html
