在 EclipseLink 生成 ddl 后,是否有可能执行 sql 脚本?
换句话说,是否有可能使用带有“drop-and-create-tables”的 EclipseLink 属性“eclipselink.ddl-generation”并且 EclipseLink 在创建后执行另一个 sql 文件(将一些数据插入到刚刚创建的一些表中)表定义?
我将 EclipseLink 2.x 和 JPA 2.0 与 GlassFish v3 结合使用。
或者我可以在项目(与 ejb3 的 war )部署中调用的 java 方法中初始化表吗?
最佳答案
出于同样的原因,我遇到了这个问题,试图找到一种在 DDL 生成后运行初始化脚本的方法。我对一个老问题提供这个答案,希望能缩短那些寻找相同解决方案的人的“文学研究”量。
我使用的是 GlassFish 4 及其默认的 EclipseLink 2.5 JPA 实现。 JPA 2.1 下的新架构生成功能使得在 DDL 生成完成后指定“初始化”脚本变得相当简单。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="cbesDatabase" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>java:app/jdbc/cbesPool</jta-data-source>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.create-source" value="metadata"/>
<property name="javax.persistence.schema-generation.drop-source" value="metadata"/>
<property name="javax.persistence.sql-load-script-source" value="META-INF/sql/load_script.sql"/>
<property name="eclipselink.logging.level" value="FINE"/>
</properties>
</persistence-unit>
</persistence>
上述配置从元数据(即注释)生成 DDL 脚本,之后运行 META-INF/sql/load_script.sql
脚本来填充数据库。在我的例子中,我用测试数据植入了几个表并生成了额外的 View 。
有关 EclipseLink 使用 JPA 属性的其他信息可以在 EclipseLink/Release/2.5/JPA21 的 DDL 生成部分找到。 .同样,Section 37.5 Database Schema Creation在 Oracle 的 Java EE 7 教程和 TOTD #187也提供一个快速介绍。
关于java - 在 jpa/EclipseLink 创建表后执行 sql 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2730676/