私は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
私が間違って何をしているのですか?