2017-12-30 30 views
0

私はプロジェクトでスプリングブートを使用します。私はテーブルを作成し、シードデータを入力するためのliquibaseスクリプトを持っています。 repoテストは@DataJpaTestアノテーションを使用して実行され、デフォルトではメモリ内のh2データベースが使用されます。H2エラー、またはPascalCaseからsnake_caseへのテーブルの名前変更

このプロジェクトのデータベースは当初はSQLServerでしたので、liquibaseスクリプトのテーブル名はPascalCaseになりました。フーバー。その後、データベースをPostgreSQLに変更しなければならなかったので、PascalCaseからsnake_caseにテーブル名を変更するための新しいliquibaseスクリプトが追加されました。 FooBarからfoo_barへ

liquibaseスクリプトはPostgreSQLデータベースに対して正常に実行されますが、(H2データベースに対して)repoテストの一部として実行されると、名前変更スクリプトは失敗します。単一の単語でテーブル名の名前を変更しようとすると失敗します。弁護士から機関まで私はすでに試したし、失敗した

Caused by: org.h2.jdbc.JdbcSQLException: Table "INSTITUTION" already exists; SQL statement: 
ALTER TABLE PUBLIC.Institution RENAME TO institution [42101-196] 

ソリューション::私は以下のエラーを取得する

  1. カスタムメモリ内のH2データベースを指しているのsrc /テスト/リソースで別のapplication.propertiesファイルこれは次のように見える:

    spring.datasource.url = JDBC:H2:MEM:試験; DB_CLOSE_ON_EXIT = FALSE; MODE = PostgreSQLの spring.datasource.username = SA spring.datasource.password = SA spring.datasour ce.driverClassName = org.h2.Driver

  2. 私はまた、大文字小文字を保持すると思っているliquibaseスクリプトの二重引用符で表名を言及しようとしました。 did not work

助けてください! :(

答えて

0

H2は大文字にあなたの引用符で囲まれていないテーブル名の参照を変換しますが、二重引用符で、ターゲット名を引用した場合:。

ALTER TABLE Institution RENAME TO "institution" 

... institutionINSTITUTIONテーブルの名前を変更します

あなたのJPA。実装は、ここからテーブル名を引用するように構成する必要があります.hibernateでは、hibernate.globally_quoted_identifiers=trueを使用することができます。

関連する問題