当前位置: 首页 > 面试题库 >

Hibernate:列顺序由hbm2ddl颠倒

韩征
2023-03-14
问题内容

我让hbm2ddl为我创建表(出于开发目的),并且列与类中字段的顺序相反。

如何使其以与类相同的顺序创建列?

我认为Java类不存储字段的顺序,因此Hibernate根本不知道源顺序是什么(如果考虑更复杂的情况,这似乎是合乎逻辑的)。

但是,我至少可以要求Hibernate将PK和FK列作为第一列吗?

Hibernate 4.0.0(JBoss AS 7.1.2)MySQL 5.1.x


问题答案:

Hibernate小组说这是一个已知的限制,无法设置顺序。但是在生产中使用Hibernate时,您不应该依赖hbm2ddl,这是相当有限的事情,例如它可以添加列,但不能删除它。取而代之的是,人们通常使用LiquiBase或FlyWay或DbDeploy之类的工具来创建数据库迁移,这为您提供了更大的灵活性并可以控制架构更新。

为了描述这种方法如何起作用:假设您有一个UAT环境,并且刚刚更新了架构-
您想向现有列添加非空约束。使用hbm2ddl是不可能的,您将迫使QA从头开始重新创建数据库。使用上述工具,您需要添加一个SQL文件,这些工具将运行此新脚本,分别更新架构。您可能还需要设置hbm2ddl
= verify,以确保当前的数据库模式是最新的,反之亦然-Hibernate映射是正确的。



 类似资料:
  • ⚠️ 警告: 这个函数的执行时间随着每个字符呈指数级增长。 超过8到10个字符的任何内容都会导致浏览器挂起,因为它试图解决所有不同的组合。 生成一个颠倒字母顺序的字符串,返回一个排列组合数组(包含重复)。 使用递归。 颠倒给定字符串中的每个字母,创建所有排列组合数组。 使用 Array.map() 将字母与每个部分字母组合在一起,然后使用 Array.reduce() 将所有字母组合到一个数组中。

  • 问题内容: 在我的hibernate-4实体中,我正在使用建议的jadira usertypes 映射一个joda-time DateTime属性: 我的数据库是MySQL。将hibernate属性设置为value时,我在表中生成了以下列: 生成的包含DATETIME列。MySQL中的DATETIME仅具有秒精度,没有小数部分。为了启用小数部分(最高微秒),MySQL 5.6.4和更高版本启用 列

  • 问题内容: 我敢肯定这已经被问过了,但是我不知道确切地称呼它是什么来找到答案。 我有一个类别和子类别的表格。他们每个人都有一个ID和一个父母ID。如果是顶级类别,则父ID为0。子类别的父ID设置为其父ID。 我正在尝试编写一个SQL查询,该查询将按此顺序提供所有类别: A,a1,a2,a3,B,b1,b2,b3 这在SQL中是可能的,还是我需要使用多个查询 谢谢布拉德 问题答案: 这样的事情可能会

  • 我有4张桌子。对于这个问题,我将它们命名为tableA、tableB、tableC、tableD。 TableB看起来像这样:id、name、tag、some_other_parameters tableC看起来是这样的:id、代码、一些其他参数 表格列:id、tableA_id、tableB_id、tableC_id、entityVersion tableD中的列没有在实体中定义一对多、多对一关

  • 问题内容: 在我的hibernate应用程序中,有一个注释驱动的对象: AuditEvent 。它非常简单,没有外键关系。我通过将旧条目移动到另一个表 OldAuditEvent中 来在此表中归档,该表是 AuditEvent 表的副本。 现在,我们使用hbm2ddl(在带注释的数据模型上)为整个应用程序生成DDL,并手动复制/粘贴AuditEvent表并更改其名称以创建 OldAuditEven

  • 我们可以看到,转速不是单调增加的。在我的实体的审计表中,我有以下内容: 通过将记录与转速号链接在一起形成时间线,我得到了: 24 -- 事实上,我有一个由2台服务器组成的集群。它们都可以将数据持久化到数据库中。我怀疑这与版本号中的顺序问题有关。因为这个问题。像MyEntity anEntity=auditReader.find(MyEntity.class,id,revNum)这样的查询不起作用,