java - 在 jpa/EclipseLink 创建表后执行 sql 脚本?

标签 java orm jpa eclipselink jpa-2.0

在 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/

相关文章:

java - 在触摸坐标上创建 View ,但给出了错误的 x 和 y

javascript - Sequelize - 使用 MySQL 选择所有超过 5 分钟的记录的抽象查询

c# - 如何使用ORM + LINQ 组合键查询?

php - 使用 Redbean PHP ORM 时,是否必须在每个脚本中调用 R::freeze() ?

spring - 如何在 Tomcat 上使用 JPA、Hibernate 和 Spring 避免类加载器泄漏

java - 为什么 default-target-url 和 AJAX 调用总是得到 "GET: 403 Forbidden "?

java - 当我想读取存储在 blobstore 中的 zip 文件时出现错误

java - Osmdroid 夜间模式及首选项

java - 基于实体名称及其主键的通用数据获取 API

java - 如何将一组类从 jar 库映射到 jpa 实体以创建数据库表