【发布时间】:2016-05-17 14:06:59
【问题描述】:
我正在使用 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?马文呢?
-
我没有使用 spring.. Maven 我是
-
尝试使用相关值在 src/test/resources/META-INF 下创建第二个 persistence.xml。当测试运行时,src/test 下的资源应该优先。
-
有效!当你知道该怎么做时很容易..非常感谢艾伦..
-
还有其他东西.. 对于我的数据库控制.. 我正在使用 liquibase.. 但在测试的情况下,我只是通过休眠注释自动生成模式.. 它可以工作,但是似乎不正确..你知道是否有办法在这个内存数据库中运行我的 liquibase 更改日志?
标签: mysql hibernate hsqldb dbunit