我在IntelIj IDEA中使用EclipseLink,并且我尝试设置我的测试持久性单元,以便每次运行测试时重建数据库,并且还使用一些种子数据填充数据库。
这是我的persistence.xml中的持久性单元:
<persistence-unit name="testingUnit">
<class>org.cba.entity.Person</class>
<class>org.cba.entity.InfoEntity</class>
<class>org.cba.entity.Company</class>
<class>org.cba.entity.Hobby</class>
<class>org.cba.entity.Phone</class>
<class>org.cba.entity.Address</class>
<class>org.cba.entity.CityInfo</class>
<properties>
<property name="eclipselink.jdbc.url" value="jdbc:mysql://localhost:3306/cba_ca1_test"/>
<property name="eclipselink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="eclipselink.jdbc.user" value="root"/>
<property name="eclipselink.jdbc.password" value=""/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="javax.persistence.sql-load-script-source" value="populate.sql"/>
</properties>
</persistence-unit>
populate.sql位于resources文件夹以及带有persistence.xml的META-INF文件夹中。
当我使用此设置时,每次都会删除并创建数据库,但是populate.sql没有被加载。
当我写下这样的属性时:
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/cba_ca1_test"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.sql-load-script-source" value="populate.sql"/>
</properties>
一切正常(删除并创建和加载populate.sql),但执行需要很长时间。第一个设置在几秒钟内运行,第二个设置运行几分钟。
问题绝对不是populate.sql文件,因为它只包含大约3个SQL插入。
我认为这是因为我使用了生成eclipselink。*属性的IntelliJ IDEA。而IntelIj以某种方式优化了使用eclipselink。*命名的设置。
任何人都知道如何使这项工作,所以它不需要几分钟?
这些是我的JPA和MySQL依赖项:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>2.7.0</version>
</dependency>
我在IntellIJ中激活了对EclipseLink的Framework支持。
更新
我添加了日志记录属性
<property name="eclipselink.logging.level" value="FINE"/>
我发现,在DROP(发生得很快)之后,为每个创建表建立了一个新连接。
然后插入再次非常快。