测试运行/ JPA夹具的不同persistence.xml属性

时间:2011-06-27 19:58:39

标签: java hibernate jpa

我开发了一些Java EE / Spring网络应用程序。我使用JPA 2.0 - Hibernate。对于集成测试,我需要使用不同的数据库。那些测试需要Jetty来运行应用程序,但我设法覆盖web.xml进行这样的运行,在那里我可以修改我的Spring上下文文件,没关系。 但我每次都需要一个干净的数据库(并将一些数据加载到其中)。 由于我的数据库名称和地址是在sprig上下文中配置的,我只是按照上面的描述进行了切换 - 但是如何更改我的一些persistence.xml属性才能使数据库丢弃并重新创建? 我尝试在/ src / test / resources / META-INF中创建另一个persistence.xml(并检查了类路径中的第一个测试类),但是没有加载它,只使用了'master'版本(来自/ src /主/资源/ META-INF)。有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

使用spring,您通常将数据源定义为spring bean。数据库URL和凭证通常包含在外部文件中,例如application.properties。

如果您在src/test/resources中添加了一个新的applicaiton.properties,它将会起作用。 See also here

答案 1 :(得分:0)

您可以定义 org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager

<bean id="pum" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
       <property name="persistenceXmlLocations">
         <list>
           <value>/path/to/my/test-persistence.xml</value>
         </list>
       </property>
       <property name="dataSources">
         <map>
           <entry key="dataSource" value-ref="dataSource"/>
         </map>
       </property>
       <!-- if no datasource is specified, use this one -->
       <property name="defaultDataSource" ref="dataSource"/>
    </bean>

然后,将其链接到您的entityManagerFactory:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    ...
    ...
    <property name="persistenceUnitManager" ref="pum"/>
</bean>

我使用它来创建我自己的persistence.xml链接到HSQL内存数据库,预先加载DBUnit(使用hibernate.hbm2ddl.auto = create-drop)。

完美无缺。