我把H2设置的集成测试使用的EclipseLink,和的Arquillian Weblogic的应用程序中使用的EclipseLink和H2序列时12.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的数据源中指定我的JDBC URL和驱动程序类:
- 的jdbc:H2:文件:目标/数据库/ 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
属性。但似乎表生成,但它的序列不是由Eclipselink创建。
h2是否支持生成序列?或者我错过了任何配置?
编辑: 我检查了生成的DDL,它显示了创建序列语句生成。
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;
一切看起来这里罚款。如果您可以使用[output-mode配置属性](http://wiki.eclipse.org/EclipseLink/Examples/JPA/DDL)输出EclipseLink生成的DDL来确认EclipseLink实际生成序列。 –
谢谢Vineet,我根据你的评论更新了这个问题。 – Heidarzadeh
好吧,我不确定这是否是原因,但您似乎没有在persistence.xml中列出任何实体类,尽管您有一个'exclude-unlisted-classes'元素定义为true。如果你有一个可以复制的测试用例,我不会介意看看它。 –