2017-12-07 10 views
0

私はSpring + Hibernate Javaアプリケーションを構築しています。私はのメモリ内のデータベースで行われたいくつかの統合テストを追加したかったのです。PostgresqlのHSQLDB:タイプが見つからないか、特権が不足しています:BIGSERIAL

私の通常のデータベースはPostgreSQLで、flywayプラグインで実行されている.sqlスクリプトを使用してデータを入力します。 IDフィールドはBIGSERIALに設定されます。 メモリ内のデータベースを使用して、元のデータベースに似せて、そのクラスでいくつかのクラスをテストしようとしました。私は多くのものすべてを設定することができましたが(私もそうだと思いますが)、テストクラス自体を実行すると、CREATE TABLEスクリプトでエラーが発生します:

原因:org.hsqldb.HsqlException:タイプが見つからないか、 :BIGSERIAL

私は、PostgreSQLのコンパイラ性を有効にするためにHSQLDBを設定する必要があることを知りました。 PostgreSQLの非標準機能を有効にするには、SET DATABASE SQL SYNTAX PGS TRUEまたは同等のURLプロパティsql.syntax_pgs = trueを使用します。

私は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; 
    } 
} 

そしてTestClassを自身で:

@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

私が間違って何をしているのですか?

答えて

0

私は、スクリプトがflywayによって実行され、persistence.xmlのすべての構文コマンドを無視していることがわかりました。テスト環境設定クラスで@EnableAutoConfigurationを除外せずにHSQLDBで実行しています:) Springブートですでにのメモリ内のスキーマを作成するためにHibernateがコンフィグレーションされていることが分かりました。データベース。だから私はデータベーススクリプトをまったく使用する必要はなく、偶然にも実行されました。

関連する問題