2

我把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;

+0

一切看起來這裏罰款。如果您可以使用[output-mode配置屬性](http://wiki.eclipse.org/EclipseLink/Examples/JPA/DDL)輸出EclipseLink生成的DDL來確認EclipseLink實際生成序列。 –

+0

謝謝Vineet,我根據你的評論更新了這個問題。 – Heidarzadeh

+0

好吧,我不確定這是否是原因,但您似乎沒有在persistence.xml中列出任何實體類,儘管您有一個'exclude-unlisted-classes'元素定義爲true。如果你有一個可以複製的測試用例,我不會介意看看它。 –

回答

3

我有同樣的問題,我設法得到這個工作,只是這一行添加到您的持久性文件:

<property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.H2Platform"/> 

那一定是<properties>的第一屬性。

請注意,您仍然會收到警告。

我找到了解決辦法here

+0

任何想法如何擺脫警告? – Stephan

+0

不,我不知道。 – Groben