2011-02-25 39 views
2

我正嘗試使用hibernate3-maven-plugin和dbunit-maven-plugin maven插件創建並填充內存中的hsql數據庫模式。使用hibernate和dbunit maven插件在內存數據庫中創建問題

我設法做到一個文件,但沒有記憶。 hibernate插件可以毫無怨言地完成工作,但是一旦hibernate插件完成,dbunit就會抱怨db模式,它看起來就不存在了。正如我所說的,我完全可以在文件中使用hsql數據庫,但在內存中無法做到這一點。

這是Hibernate插件代碼:

<plugin> 
<groupId>org.codehaus.mojo</groupId>  
<artifactId>hibernate3-maven-plugin</artifactId>  
    <version>2.2</version>    
     <executions> 
      <execution> 
       <id>hsqlDB</id> 
        <phase>test-compile</phase> 
        <goals> 
        <goal>hbm2ddl</goal> 
        </goals> 
        <configuration> 
         <components> 
          <component> 
           <name>hbm2ddl</name> 
           <implementation>annotationconfiguration</implementation> 
          </component> 
         </components>  

         <componentProperties> 
          <jdk5>true</jdk5>        
          <propertyfile>target/test-classes/hibernateconf.properties</propertyfile> 
          <configurationfile>target/test-classes/hibernate.cfg.xml</configurationfile> 
          <skip>${skipTests}</skip> 
         </componentProperties>            
        </configuration> 
       </execution> 
      </executions> 
      <dependencies>      
       <dependency> 
        <groupId>org.hsqldb</groupId> 
        <artifactId>hsqldb</artifactId> 
        <version>2.0.0</version> 
        <scope>test</scope>   
       </dependency>      
      </dependencies>     
     </plugin> 

hibernateconf.properties包含:

hibernate.dialect=org.hibernate.dialect.HSQLDialect 
hibernate.connection.driver_class=org.hsqldb.jdbcDriver 
hibernate.connection.url=jdbc:hsqldb:mem:mytestdb;hsqldb.write_delay=false;shutdown=true 
hibernate.connection.username=sa 
hibernate.connection.password= 
hibernate.connection.pool_size=1 
hibernate.hbm2ddl.auto=create-drop 

這是DbUnit的

<plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>dbunit-maven-plugin</artifactId> 
      <version>1.0-beta-3</version> 
      <configuration> 
       <dataTypeFactoryName>org.dbunit.ext.hsqldb.HsqldbDataTypeFactory</dataTypeFactoryName> 
       <driver>org.hsqldb.jdbcDriver</driver> 
       <username>sa</username> 
       <password></password> 
       <url>jdbc:hsqldb:mem:mytestdb;shutdown=true;hsqldb.write_delay=false</url> 
       <src>src/test/resources/sample-data.xml</src> 
       <type>CLEAN_INSERT</type> 

       <skip>${skipTests}</skip> 
       <transaction>true</transaction> 
       <skipOracleRecycleBinTables>true</skipOracleRecycleBinTables> 
      </configuration> 
      <executions> 
       <execution> 
        <id>test-compile</id> 
        <phase>test-compile</phase> 
        <goals> 
         <goal>operation</goal> 
        </goals> 
       </execution> 
      </executions> 
      <dependencies>   
       <dependency> 
        <groupId>org.hsqldb</groupId> 
        <artifactId>hsqldb</artifactId> 
        <version>2.0.0</version> 
        <scope>test</scope>   
       </dependency> 
      </dependencies> 
     </plugin> 

這是錯誤消息:

Caused by: org.dbunit.dataset.NoSuchTableException: ExamplePersonEntity 
    at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:281) 

¿是否有任何想法?

非常感謝

回答

0

的URL指示數據庫應關機當最後一個連接被關閉。這適用於文件數據庫(儘管它可能不是必需的),但會關閉並丟棄內存數據庫。更改網址如下:

hibernate.connection.url=jdbc:hsqldb:mem:mytestdb;shutdown=false 

而這一次

<url>jdbc:hsqldb:mem:mytestdb;shutdown=false</url> 
+0

非常感謝您的回答,但這並不適合我。原來我有這些分貝網址,但由於我沒有得到任何結果,我開始玩弄shutdown參數和hsqldb.write_delay之一。 謝謝在任何情況下:) – 2011-02-25 17:17:16

+0

如果它肯定沒有與shutdown = false一起工作,那麼您對hibernate和dbunit使用不同的Java進程。在這種類型的設置中,您需要使用帶有內存數據庫的HSQLDB服務器。 – fredt 2011-02-25 18:51:51

相關問題