我正在使用 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&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&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 指向我的内存数据库?
提前致谢!
最佳答案
由于您没有使用 Spring,因此您可以尝试基于 Maven 的解决方案。这涉及到在 src/test/resources/META-INF 下创建一个具有相关属性的单独的 persistence.xml。
运行测试时,此 persistence.xml 应优先于 src/main/resources 中的持久性文件。
关于mysql - 让hibernate指向与DBUnit相同的DB连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37278483/