Проблема создания базы данных в памяти с плагинами hibernate и dbunit maven - PullRequest
2 голосов
/ 25 февраля 2011

Я пытаюсь создать и заполнить в памяти схему hsql db, используя плагины hibernate3-maven-plugin и dbunit-maven-plugin maven.

Мне удалось сделать это в файл, но нет памяти. плагин hibernate делает свою работу без жалоб, но как только плагин hibernate закончен, dbunit жалуется на схему db, она выглядит так, как будто ее больше нет. Как я уже сказал, у меня это прекрасно работало с hsql db в файле, но мне не удалось сделать это в памяти.

Это код плагина гибернации:

<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

А это бубен

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

any У кого-нибудь есть идеи?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 25 июня 2011

Я также исследовал связанную проблему. Похоже, что схема в памяти не сохраняется между сеансами: http://vageeshhoskere.wordpress.com/2011/06/16/unit-test-with-junit-for-hibernate-using-hsqldb-in-memory/

Итак, вы можете сделать то, что нужно сделать в одном сеансе (что довольно ограниченно), или попробовать версию файла hsqldb

0 голосов
/ 25 февраля 2011

URL указывает, что база данных должна быть закрыта при закрытии последнего соединения.Это работает для файловых баз данных (хотя это может и не понадобиться), но закроет и удалит базу данных памяти.Измените URL следующим образом:

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

и этот

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