使用hibernate和dbunit maven插件创建内存数据库时出现问题

时间:2011-02-25 01:26:43

标签: java hibernate maven hsqldb dbunit

我正在尝试使用hibernate3-maven-plugin和dbunit-maven-plugin maven插件创建并在内存中填充hsql db模式。

我设法将它写入文件,但没有记忆。 hibernate插件在没有抱怨的情况下完成它的工作,但是一旦hibernate插件完成,dbunit会抱怨db模式,它看起来就不再存在了。正如我所说,我在文件中使用了hsql db,但是没有设法在内存中完成。

这是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)

¿有人有任何想法吗?

非常感谢

2 个答案:

答案 0 :(得分:0)

URL表示最后一个连接关闭时应关闭数据库。这适用于文件数据库(虽然可能没有必要)但会关闭并丢弃内存数据库。更改URL如下:

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

和这一个

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

答案 1 :(得分:0)

我也在研究一个相关的问题。看来内存中架构不会在会话中持续存在:http://vageeshhoskere.wordpress.com/2011/06/16/unit-test-with-junit-for-hibernate-using-hsqldb-in-memory/

因此,您可以在单个会话中执行需要完成的操作(这是相当有限的),或者尝试hsqldb的文件版本