Java 如何使用Hibernate创建数据库模式

Java 如何使用Hibernate创建数据库模式,java,database,hibernate,hbm2ddl,Java,Database,Hibernate,Hbm2ddl,读了之后,出现了一些问题。 首先,我使用Hibernate的原因是独立于数据库供应商(不需要编写10个版本的“相同”sql查询,例如tsql和sql) 我的问题出现在创建数据库模式(生产环境)时。就我所知,我有两种选择 hbm2dll=更新 纯sql(ddl)脚本 第一种选择在上面的线程中进行了广泛讨论。 第二种选择是不好的,因为这意味着我回到了第一个问题:“不想创建依赖于数据库供应商的sql语句”。(如果“all”(至少Hibernate支持的数据库)正在实现(用于定义和检查数据库结构的SQL

读了之后,出现了一些问题。 首先,我使用Hibernate的原因是独立于数据库供应商(不需要编写10个版本的“相同”sql查询,例如tsql和sql)

我的问题出现在创建数据库模式(生产环境)时。就我所知,我有两种选择

  • hbm2dll=更新
  • 纯sql(ddl)脚本
  • 第一种选择在上面的线程中进行了广泛讨论。
    第二种选择是不好的,因为这意味着我回到了第一个问题:“不想创建依赖于数据库供应商的sql语句”。(如果“all”(至少Hibernate支持的数据库)正在实现(用于定义和检查数据库结构的SQL子集。)equal,则此语句可能为false)

    在开发/登台模式中执行所有更改,并在生产中手动(或自动)传输和执行脚本,但不要让hibernate运行它们。由于hbm2ddl更新并没有覆盖所有情况,脚本可能需要一些调试

    事实上,我从不让hibernate对任何数据库运行ddl。我使用hbm2ddl生成文本:

    org.hibernate.tool.hbm2ddl.SchemaExport --config=hibernate.cfg.xml --text --format --delimiter=;
    
    org.hibernate.tool.hbm2ddl.SchemaUpdate --config=hibernate.cfg.xml --text --format --delimiter=;
    
    我喜欢Hibernate(非常喜欢),我认为它可以生成一些质量非常好的代码,但我不会马上在生产数据库上使用它,我会让一个非常有礼貌的灰熊保姆来照看它。在一段时间内,每件事都会很顺利,但有一件事会变得很糟糕,那就是真的糟糕


    我的建议是在测试环境中,让hibernate生成数据库模式。在测试环境中测试它们。然后将这些脚本带到生产环境并运行它们。注意这里的特殊性;即使测试非常成功,我也不会让Hibernate在生产服务器上失控。获取Hibernate schemagen的输出,对其进行测试,验证后,将其部署到生产服务器。

    通常转储JPA架构的工具基于
    SchemaExport
    工具,该工具只读取静态元数据

    有一个Maven/Gradle插件生成JPA模式。中包括所有属性、命名策略、用户类型等


    您还可以使用它为生成自动化的架构迁移。

    让我来完成吧。完全同意。我不想在这里表示反对,但你读过我的问题吗?我读过;我的回答有没有具体的方式表明我对你的问题理解错误?你回答的第一句话。哦,我明白了。就像我说的,我并没有试图对抗。我将删除第一行。共享思想;不幸的是,在stackoverflow上不可能(AFAIK),但这是一个很好的想法。没有不愉快的感觉,谢谢你的帮助。我相信我现在已经下定决心了,我只会在开发环境中使用“更新”。并使用“sql脚本”在产品环境中创建数据库