无需数据库连接即可从 JPA 2.1 带注释的实体类自动生成数据模式

2024-02-01

两年前,我正在开发一个项目,使用:

  • 弹簧 4.0.3.RELEASE
  • jpa 2.0
  • 休眠 4.2.7.Final
  • java 1.6.X

该项目有一个 Maven 任务 hibernate3-maven-plugin,它允许我们生成数据库模式,而无需连接到数据库 (MySQL)。

现在我们正在升级这个项目:

  • java 1.8
  • jpa 2.1
  • 弹簧 4.2.4.发布
  • 休眠 5.0.6.Final

据我所知,hibernate3-maven-plugin 不适用于 JPA 2.1 和 hibernate > 4.3。

我发现的所有解决方案都需要连接到数据库。

例如:从 JPA 带注释的实体类自动生成数据模式 https://stackoverflow.com/questions/297438/auto-generate-data-schema-from-jpa-annotated-entity-classes.

有谁知道如何离线生成数据库架构? 我所拥有的只是一个 persistence.xml ,其中列出了所有实体类。


我遵循你的想法,将 h2 与 Mysql 方言一起使用,但使用 JPAPersistence.generateSchema(...).

它确实有效,除非所有命令都没有用半栏分隔......

如何使用 JPA 2.1 来完成此操作?

否则我会改用你的解决方案。

import java.util.Properties;

import javax.persistence.Persistence;
import javax.persistence.PersistenceException;

import org.hibernate.jpa.AvailableSettings;

/**
 * Generate DDL with hibernate 4+/5:
 * http://stackoverflow.com/questions/27314165/generate-ddl-script-at-maven-build-with-hibernate4-jpa-2-1/27314166#27314166
 * @author dmary
 * 
 */
public class Jpa21SchemaExport {

    /**
     * 
     */
    public Jpa21SchemaExport() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        execute(args[0], args[1]);
        System.exit(0);

    }

    public static void execute(String persistenceUnitName, String destination) {
        System.out.println("Generating DDL create script to : " + destination);

        final Properties persistenceProperties = new Properties();

        // XXX force persistence properties : remove database target
        persistenceProperties.setProperty(org.hibernate.cfg.AvailableSettings.HBM2DDL_AUTO, "");
        persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_DATABASE_ACTION, "none");

        // XXX force persistence properties : define create script target from metadata to destination
        // persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_CREATE_SCHEMAS, "true");
        persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_SCRIPTS_ACTION, "create");
        persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_CREATE_SOURCE, "metadata");
        persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_SCRIPTS_CREATE_TARGET, destination);

        persistenceProperties.setProperty(AvailableSettings.JDBC_DRIVER,"org.h2.Driver");
        persistenceProperties.setProperty(AvailableSettings.JDBC_URL, "jdbc:h2:mem:export");
        persistenceProperties.setProperty(AvailableSettings.JDBC_USER, "sa");
        persistenceProperties.setProperty(AvailableSettings.JDBC_PASSWORD, "");

        persistenceProperties.setProperty(org.hibernate.cfg.AvailableSettings.DIALECT, "com.wiztivi.sdk.persistence.MySQL5InnoDBUTF8Dialect");

        try
        {
            Persistence.generateSchema(persistenceUnitName, persistenceProperties);
        } catch (PersistenceException pe)
        {
            System.err.println("DDL generation failed: ");
            pe.printStackTrace(System.err); 
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无需数据库连接即可从 JPA 2.1 带注释的实体类自动生成数据模式 的相关文章

随机推荐

  • 为什么 React/redux 状态会在刷新时重置?

    当我登录时 一切正常 但当我点击刷新或导航到其他地方时 状态就会重置 知道为什么吗 我希望能够从状态引用用户并获取名称等信息并在组件内使用它 但它只有在我登录后才起作用 然后它就会重置 另外 为什么我必须在mapstatetoprops中使
  • 导入数据集时出现问题:“扫描错误(...):第 1 行没有 145 个元素”

    我正在尝试使用 R 导入我的数据集read table Dataset df lt read table C dataset txt header TRUE 但我收到以下错误消息 Error in scan file what nmax s
  • JMeter 中默认的响应超时是多少?

    如果我们没有在 HTTP 请求 采样器中设置任何超时 任何人都可以帮助了解 JMeter 中的默认响应时间吗 Thanks 它默认为0 无超时 设置超时的推荐方法是使用 GUI 如果由于某种原因它不适合您 您可以使用以下属性 用户属性 fi
  • java 中的 C# Type.GetType() 是否有等效语法

    请告诉我 C 是否有等效语法Type GetType 在Java中 和等效语法Activator CreateInstance 在Java中 Thanks Type GetType 等效项
  • ES2015“导入”在带有 --harmony_modules 选项的节点 v6.0.0 中不起作用

    我正在使用节点 v6 0 0 并想使用 ES2016 ES6 但是我意识到 导入 语法不起作用 导入 不是在 ES2015 中编写模块化代码的基础吗 我尝试运行节点 harmony modules选项也是如此 但仍然出现有关 导入 的相同错
  • Python epsilon 不是最小的数

    什么是sys float info epsilon return 在我的系统上我得到 gt gt gt sys float info epsilon 2 220446049250313e 16 gt gt gt sys float info
  • OpenCV 3.0.0 SurfFeatureDetector 和 SurfDescriptorExtractor 错误

    我正在尝试实现 OpenCV 3 0 0 SURF 功能描述和检测 但在 OpenCV 站点上运行示例代码后 我收到了大量与 SURF 相关的错误 知道可能出了什么问题吗 谢谢 include
  • 如何在谷歌模拟中将 void* 参数设置为一组值?

    我正在使用 google mock 对我的代码进行单元测试 并且我试图通过 void 作为输出参数返回一组值 uint32 t bigEndianTestValues BIG ENDIAN FIELD MAX ELEMENTS 0xDEAD
  • 如何从IDE转向文本编辑器?

    多年来我一直在使用各种语言的 IDE VS IntelliJ Eclipse NetBeans FlashDevelop 等 而且我总是发现它们缓慢且混乱 是的 我知道窗口可以隐藏 重新排列等等 然而最近我已经学习并有点精通 VIM 并且已
  • 有没有可能通过 Firefox 扩展创建整个屏幕的屏幕截图?

    我目前正在使用 canvas 使用 JavaScript 创建屏幕截图 并将其编码为 base64 但是 我当前的屏幕截图仅包括实际的网页 没有其他内容 没有地址栏等 我想知道是否有可能实现整个屏幕的屏幕截图 任务栏和整个浏览器窗口 等 以
  • C++ 何时发生不完整类型错误

    谁能告诉我 C 编译器何时抛出 不完整类型错误 注意 我故意让这个问题有点开放式 以便我可以自己调试我的代码 当编译器看到前向声明但没有该类型的完整定义 而该类型正在某处使用时 通常会发生这种情况 例如 class A class B A
  • withCount() 不包括已删除的行?

    我怎样才能使withCount comments 还包括所有已删除 废弃的行 例如 如果我有 5 条评论 我删除了 1 条 我仍然期望withCount comments 返回 5 但实际上返回了 4 我的完整查询如下所示 query Po
  • 正则表达式之前或之后

    我想使用正则表达式来匹配字符串tofind 我有两种可能性 第一种 before tofind 第二个是 tofind after 如何将两个示例中的单词 tofind 与一个正则表达式行匹配 I used before tofind to
  • 如何从多个地方重定向到上一页?

    我可能在这里错过了一些非常简单的东西 假设我有一个名为Option 然后 我在视图中列出这些选项 并使用 启用 禁用 按钮来触发控制器操作 然后启用或禁用该特定的操作 Option 如果列表只在一个地方 我知道只需打电话redirect t
  • 在 www.instagram.com 上使用 Python/Selenium 接受 cookie 错误 [重复]

    这个问题在这里已经有答案了 我正在尝试使用 Firefox Python Selenium 使用以下代码登录 Instagram from time import sleep from selenium import webdriver b
  • 如何与多个用户一起使用 Hive

    我有几个用户使用同一个配置单元 现在我希望每个用户在配置单元中都有一个私有元数据 example 用户调用显示表 a1 a2 a3 用户b调用显示表 b1 b2 b3 当然 当用户运行查询时 他们无法访问其他用户的表 thanks 为了让新
  • 具有 TimeSpan 数据类型的 DataView RowFilter

    我尝试使用DataView RowFilter对于数据类型为 TimeSpan 的列 如下所示 dv RowFilter Convert time System String LIKE 17 12 00 我发现搜索参数 17 or 12 对
  • PHP Heredoc解析错误[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 这会产生输
  • 查询 json / jsonb 列超级慢。我可以使用索引吗?

    我正在尝试加快对 PostgreSQL 数据库中存储的一些 json 数据的查询速度 我继承了一个查询 PostgreSQL 表的应用程序 名为data有一个名为value其中 value 是 json 类型的 blobjsonb 它大约有
  • 无需数据库连接即可从 JPA 2.1 带注释的实体类自动生成数据模式

    两年前 我正在开发一个项目 使用 弹簧 4 0 3 RELEASE jpa 2 0 休眠 4 2 7 Final java 1 6 X 该项目有一个 Maven 任务 hibernate3 maven plugin 它允许我们生成数据库模式