问题标签 [hbm2ddl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
15 回答
182131 浏览

java - 休眠:hbm2ddl.auto=生产中的更新?

在生产环境中运行配置hbm2ddl.auto=update为更新数据库模式的 Hibernate 应用程序是否可以?

0 投票
14 回答
1175466 浏览

java - Hibernate hbm2ddl.auto 配置的可能值是什么,它们的作用是什么

我真的很想知道更多关于更新、导出和可以给我的值hibernate.hbm2ddl.auto
我需要知道什么时候使用更新,什么时候不使用?什么是替代方案?

这些是可能在 DB 上发生的变化:

  • 新表
  • 旧表中的新列
  • 已删除的列
  • 列的数据类型已更改
  • 一种类型的列改变了它的属性
  • 表被丢弃
  • 列的值已更改

在每种情况下,最好的解决方案是什么?

0 投票
1 回答
1730 浏览

mysql - 如何在 hibernatetool Ant 任务中找到 JNDI 资源

我想用 Ant 生成我的数据库模式。我正在使用 hbm2ddl 任务。

我正在使用带有 JNDI 的 Hibernate。我的 hibernate.cfg.xml 看起来像:

我的 $CATALINA_HOME/webapps/myapp/META-INF/context.xml 看起来像:

在 $CATALINA_HOME/webapps/myapp/WEB-INF/web.xml 我有:

build.xml我有下一个目标。

问题是 ant 没有找到存储在 context.xml 中的 Resource 元素。

我尝试在类路径元素中添加 nex 片段,但没有成功。

如何让 Ant 找到 context.xml 中定义的资源?

我发布了一个完整的错误堆栈跟踪。

0 投票
1 回答
1057 浏览

hibernate - Hibernate Validator:hbm2ddl 忽略 EmbeddedId 约束

这里有一个相当具体的问题,但它已经困扰了我一天了:
我在 PostgreSQL 8.3 上使用 Hibernate Core、Annotations & Validator。

我有以下课程设置:

我希望在我的 PostgreSQL 数据库中看到长度约束转换为长度约束(它适用于@Entity而不是@Embeddable's中的其他字段)但它似乎不想工作..
即使使用@IdClass代替@EmbeddedId 并在 @Entity 中的匹配字段上应用长度约束并没有解决这个问题:数据库字段仍然是 varchar 255(对于我的需要来说,大约 250 太大了)。
有人可能会说我不应该关心这个级别的细节,但是我的强迫症方面拒绝放手.. ;) 是否不可能在 EmbeddedId 中使用 Hibernate Validator Annotations 并让 hbm2ddl 将约束应用于数据库领域?

0 投票
1 回答
4088 浏览

hibernate - 使用休眠 hbm2ddl.auto=update :如何更改列不再需要值?

我有一个曾经不是 null="true" 的属性。该字段不再需要值,因此我将其更改为 not-null="false" 但表未在数据库中更新。添加新属性不会带来任何问题。

hbm2ddl.auto=update 是否可以自动更改表以删除 not-null="true"?(我知道我可以编写一个 sql 脚本来更改它,但想让它自动更新)

0 投票
4 回答
9391 浏览

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

阅读Hibernate: hbm2ddl.auto=update in production?出现了一些问题。首先,我使用 Hibernate 的原因是独立于数据库供应商(无需编写 10 个版本的“相同”sql 查询,例如 tsql 与 sql)。

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

  1. hbm2dll = 更新
  2. 纯 sql (ddl) 脚本。

第一种选择在上面的线程中被广泛讨论。第二种选择不好,因为这意味着我又回到了我的第一个问题:“不想创建依赖于数据库供应商的 sql 语句”。(如果“所有”(至少 Hibernate 支持的数据库)正在实现DDL(用于定义和检查数据库结构的 SQL 子集。)相等,则此语句可能是错误的)。

0 投票
4 回答
2144 浏览

hibernate - 手动初始化所​​需的 Hibernate 数据库表

我开始使用 Hibernate,到目前为止还不算太难。但我对 hbm2ddl.auto 属性感到困惑。有没有办法手动执行初始化数据库表的任何操作?我只想在更改数据库后执行此操作,而不是每次运行程序时执行此操作。

编辑:在运行时呢?我的 Java 程序中有没有办法以编程方式重新初始化数据库表?org.hibernate.tool.hbm2ddl.SchemaUpdate看起来可能是正确的野兽,但我不确定它到底做了什么。

0 投票
1 回答
5583 浏览

.net - NHibernate SchemaExport 和 Configure() catch-22

我想在一个新项目中使用DDD并首先对我的类进行建模,然后根据类库生成数据库模式。我的计划是使用 NHibernate hbm2ddl 工具来做到这一点SchemaExport

问题是我无法SchemaExport工作,因为它让我陷入了一个奇怪的 catch-22 问题。SchemaExport需要一个Configuration对象,该对象本身需要一个有效的 NHibernate 配置文件以及一组数据库映射。

这里的第 22 条问题是,当我执行 Configure() 时,它会抱怨"Could not determine the name of the table for entity 'MyEntity'; remove the 'table' attribute or assign a value to it."所以该Configure()方法需要表存在,而SchemaExport应该根据Configuration我无法创建的表来创建它,因为表不存在不存在。

那么,我到底应该如何创建一个有效的 NHibernate ,其中包含实际做一些有用的事情Configuration所需的映射,而不会抛出并抱怨它找不到要创建的表?是否有一个“模式”我可以设置对象,这样它就不会检查数据库是否存在给定的表,还是我需要做其他事情?SchemaExportConfigure()SchemaExportConfiguration

0 投票
1 回答
2762 浏览

database - Db 迁移 - Hibernate/JPA - hbm2ddl - 差异工具

我用:

  • EJB3 / JPA(休眠)
  • MySQL 5

我必须建立一个系统来帮助数据库迁移。尝试使用 LiquiBase,但它似乎还不够成熟,无法与 Hibernate 一起使用。

我想做的是:

  • 我有 1.0 版的应用程序在生产中
  • 我已经开发和测试了 2.0 版的应用程序
  • 我想在生产中更新应用程序数据库而不丢失数据

实际上,我想使用新persistence.xml数据库和生产数据库来生成旧数据库和新数据库之间的“增量”。我希望能够检索当 hbm2ddl 处于“更新”模式时执行的 SQL 代码。

此 SQL 代码将被修改(drop+create=rename 等...)以避免丢失可能发生的数据hbm2ddl.auto=update

我想这是可能的,因为 Hibernate 在使用hbm2ddl.auto=update. 但我希望能够在 Ant 任务中使用hibernatetool.

我在互联网上找不到很多关于此的信息,所以我想知道是否有人已经在这里做过类似的事情并且可以帮助我。

我做了以下事情:

我真的不知道该怎么做,我能够获得创建 sql 文件,但我只想要增量。我必须把 update="true" ?我可以在应用程序服务器之外使用带有持久性单元的 jpaconfig(数据库设置是在 Glassfish 上的 JNDI 资源上设置的)。(试过了,就是找不到数据库)

我还尝试使用<jdbcconfiguration propertyfile="hibtest.properties"></jdbcconfiguration>或设置数据库的属性,persistence.xml而不是使用 JNDI 资源。

我收到以下错误:

我使用 MySQL,我的 JDBC 属性是:

我的 JDBC MySQL 驱动程序位于${core.lib.server}: mysql-connector-java-5.1.7-bin.jar. (我也尝试放入 classpath <fileset dir="/home/slorber/workspace/core/lib/server" includes="*.jar" />。)

我还将它添加到 Ant(Eclipse 插件)的运行配置类路径中。

所以我的问题是:

  • 我做错了什么来做我想做的事吗?
  • 这是您使用 Hibernate 框架进行数据库迁移的方式吗?(如果不在手工制作的 SQL 文件中写入所有 db 更改,您还会做什么?)
0 投票
1 回答
1874 浏览

hibernate - 使用 Hibernate (hbm2ddl) 克隆表的定义

在我的休眠应用程序中有注释驱动对象:AuditEvent。它非常简单,没有外键关系。我通过将旧条目移动到另一个表OldAuditEvent来归档该表中的旧条目,该表是AuditEvent表 的克隆。

现在,我们使用 hbm2ddl(在我们的注释数据模型上)为整个应用程序生成 DDL,并手动复制/粘贴 AuditEvent 表并更改其名称以创建OldAuditEvent

我想自动化构建过程,有什么方法可以告诉 hbb2ddl:“嘿,拿这个实体,将表名更改为 X 并重新生成它的 DDL”?

更新:我能够通过您概述的方法来完成这项工作。唯一的麻烦在于 AnnotationSessionFactoryBean 因为它是一个工厂 bean,而 spring 只会给你它工厂的输出。我创建了 ConfigExposingAnnotationSessionFactoryBean(扩展 AnnotationSessionFactoryBean)以通过静态公开 bean 工厂——有点像 hack,但我想要做的就是运行构建时任务。