使 hibernate 指向与 DBUnit 相同的数据库连接

Make hibernate point to the same DB connection as DBUnit

我正在使用 hiberante jpa 连接到 mysql 数据库。

我的 persistence.xml 中的持久性单元如下所示:

<persistence-unit name="inventoryManager">          

        <!--some settings-->

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/inventory?useSSL=false&amp;useUnicode=true&amp;useJDBCCompliantTimezoneS‌​hift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="1234"/>

            <!--Hibernate properties-->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.format_sql" value="false"/>
            <property name="hibernate.hbm2ddl.auto" value="validate"/>
        </properties>
    </persistence-unit>

我的 DAO 正在使用这个连接来执行对数据库的所有操作。

我也在使用 DBUnit 进行测试,但我使用的是内存数据库 (hsql)。它在我的测试用例构造函数中的配置如下所示:

       System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "org.hsqldb.jdbcDriver" );
       System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:hsqldb:mem:db" );
       System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "sa" );
       System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "" );
       System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA, "db" ); 

所以当我 运行 一个调用一个 DAO 的测试。 DAO 实例化一个 entityManager,它指向 persistence.xml

中指定的 mysql 连接

问题是:如何使我的 DAO 中的 entityManager 指向我的内存数据库?

提前致谢!

您可以执行如下操作:

1.Create 一个指向 In Memory DB 的数据源 bean,如下所示

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="org.hsqldb.jdbc.JDBCDriver" /> <property name="jdbcUrl" value="jdbc:hsqldb:file:/data/data.db" /> </bean>

2.Define 将引用此数据源的 EntityManagerFactory。

3.Add 这两个 bean 在 testConfig.xml

4.Run 与 JUnit

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations ={ "testconfig.xml" })

由于您没有使用 Spring,您可以尝试基于 Maven 的解决方案。这涉及在 src/test/resources/META-INF 下创建具有相关属性的单独 persistence.xml。

当 运行 你测试这个 persistence.xml 应该优先于 src/main/resources 中的那个。