h2を使用して、Eclipselink、Arquillian、およびWeblogic12.1.1を使用するアプリケーションの統合テストをセットアップしています。
これは私の実体です:
@Entity
@Table(name = "AFIS_REQUEST")
public class Request implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "requestSEQ")
@SequenceGenerator(name = "requestSEQ", sequenceName = "REQUEST_ID_SEQ", allocationSize = 1)
@Column(name = "ID")
private Long id;
...
}
そしてこれは私のpersistence.xmlです
<persistence-unit name="myPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/arquillian</jta-data-source>
<class>com.my.Request</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<validation-mode>NONE</validation-mode>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.logging.level.sql" value="FINEST"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.H2Platform"/>
</properties>
</persistence-unit>
そして、これがWeblogicデータソースで指定されたJDBCURLとDriverクラスです。
- jdbc:h2:file:target / databases / h2 / db
- org.h2.jdbcx.JdbcDataSource
しかし、テストを開始すると、次の例外が発生します。
<Dec 3, 2012 3:58:23 PM IRST> <Warning> <EclipseLink> <BEA-2005000> <2012-12-03 15:58:23.217--ServerSession(16406343)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.h2.jdbc.JdbcSQLException: Sequence "REQUEST_ID_SEQ" not found; SQL statement:
CALL NEXT VALUE FOR REQUEST_ID_SEQ [90036-166]
Error Code: 90036
Call: CALL NEXT VALUE FOR REQUEST_ID_SEQ
Query: ValueReadQuery(sql="CALL NEXT VALUE FOR REQUEST_ID_SEQ")>
テストを開始するときにテーブルを作成し、プロパティに割り当てdrop-and-create-tables
たテストを終了するときにテーブルを削除する必要があるためです。eclipselink.ddl-generation
しかし、Tableは生成されているようですが、そのシーケンスはEclipselinkによって作成されていません。
h2はシーケンスの生成をサポートしていますか?または、構成が不足していますか?
編集: 生成されたDDLを確認しましたが、createsequenceステートメントが生成されていることが示されています。
CREATE TABLE REQUEST (ID BIGINT NOT NULL, ... , PRIMARY KEY (ID))
CREATE SEQUENCE REQUEST_ID_SEQ START WITH 1
次に、H2 Webコンソールを使用して生成されたデータベースに接続し、シーケンスが生成され、そこでCALL NEXT VALUE FOR REQUEST_ID_SEQ
正常に実行できることを確認しました。
では、なぜEclipselinkがそれについて不平を言っているのですか!?Sequence "REQUEST_ID_SEQ" not found;