1
私はプロジェクトで春にJPA(休止状態の実装)を使用しています。自動テストを実行する場合、persistance.xml
はspringを使用して構成され、データベース用の作成および削除スクリプトを生成します。JPAスクリプト生成用複製staments
Book
と呼ばれるエンティティは1つだけです。テーブルBook
を作成するには、作成スクリプトに1行、ドロップスクリプトには1行を作成して、テーブルBook
を削除する必要があります。
問題は、テストを実行するたびにスクリプトが再生成されず、新しい行がスクリプトに追加されるということです。
jdbc.driverClassName=org.hsqldb.jdbc.JDBCDriver
jdbc.url=jdbc:hsqldb:mem:testdb
jdbc.username=sa
jdbc.password=
jdbc.showSql=true
jpa.database.action=drop-and-create
jpa.scripts.action=drop-and-create
:
create table Book (title varchar(255) not null, primary key (title))
create table Book (title varchar(255) not null, primary key (title))
create table Book (title varchar(255) not null, primary key (title))
これらは、持続性の設定が
<!-- C3p0 datasource with connection pool configuration -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxPoolSize" value="20" />
<property name="minPoolSize" value="5" />
<property name="maxStatements" value="50" />
</bean>
<bean id="EntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="JpaAdapter" />
<property name="persistenceUnitName" value="com.test.domain.PU" />
<property name="jpaPropertyMap">
<map>
<entry key="javax.persistence.schema-generation.database.action" value="${jpa.database.action:none}"/>
<entry key="javax.persistence.schema-generation.scripts.action" value="${jpa.scripts.action:none}"/>
<entry key="javax.persistence.schema-generation.scripts.drop-target" value="${jpa.scripts.drop-target:target/generated-resources/schemagen/db/drop.ddl}"/>
<entry key="javax.persistence.schema-generation.scripts.create-target" value="${jpa.scripts.create-target:target/generated-resources/schemagen/db/create.ddl}"/>
<!-- If present, a ddl script is loaded to init the db. Used only during development. For production a specific script will be provided.
The script is activated on create, drop-and-create, and create-and-drop options for database schema creation -->
<entry key="javax.persistence.sql-load-script-source" value="${jpa.sql-load-script-source:sql/init_db.ddl}"/>
</map>
</property>
</bean>
を値とテスト中に使用されるプロパティファイルは以下のとおりです。私は、テストを3回実行するのであれば、スクリプトは次のようになります誰かがこの現象を引き起こしている可能性があることを知っていますか?
メインメソッドに@Transactionalを入れてみましたか? – German
私は、メインメソッドに対して@Transactionalを使用しています。それ以上の調査の後、それは休止状態のバージョンの問題であるようです。 – xavipen