EclipseLink sql加载脚本无效

时间:2017-09-12 14:15:08

标签: java mysql jpa intellij-idea eclipselink

我在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(发生得很快)之后,为每个创建表建立了一个新连接。

然后插入再次非常快。

0 个答案:

没有答案