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

使用hibernate更新数据库架构

充栋
2023-03-14
问题内容

update

我可以创建我的数据库架构,它会自动添加属性,约束,键等。但是,更新数据库架构又如何呢?如果我从实体中删除了某些属性,hibernate则不会删除它,或者如果我更改了某些约束,则hibernate不会触及已经创建的约束…

那么,有没有一种方法可以使hibernate状态真正更新数据库架构?

谢谢。


问题答案:

我们为自己创建了一个工具,该工具创建了必要的数据库列和表,并将其添加到为数据库更新生成的SQL中。但是我们必须在SchemaUpdate生成中添加一些附加功能,以使其工作:

  • 我们必须添加非空属性的检查。这包括在数据上发出UPDATE语句以在可能的情况下消除null,从而导致默认值的下一点。
  • 我们必须添加检查列的默认值。默认值由列及其数据类型的可为空性推断。原语总是初始化为零或false,非null枚举为其第一个枚举值,但是对于其他对象,必须手动修改脚本。
  • 我们甚至增加了对调整varchar列大小的支持,因为在某些情况下数据库列的长度和长度@Column(length)有所不同。

但是总的来说,不能用这种方式创建一个完整的工具,因为如果用代码重命名一个列会怎样呢?如果类型以无法自动转换的方式更改(布尔型至今)?如果您无权访问重构历史记录,则无法始终传播更改。



 类似资料:
  • 是否可以在程序运行时更新数据库架构?我使用过ddl自动更新,但它有时不会添加或删除列,所以我必须编辑为,然后返回进行架构更新。为什么它不一致地更新架构,我宁愿在接近生产之前不使用迁移工具。因此,理想情况下,当我向实体添加字段或删除它时,它应该在下次运行程序时尝试更新方案。

  • 问题内容: 读完Hibernate之后:hbm2ddl.auto=正在生产中更新吗?出现了一些问题。首先,我使用Hibernate的原因是要与数据库供应商无关(无需编写10个版本的“相同” sql查询,例如tsql vs. sql)。 我的问题是在创建数据库架构(生产环境)时出现的。据我所知,我有两种选择。 hbm2dll =更新 纯sql(ddl)脚本。 在上面的主题中广泛讨论了第一种选择。第二

  • 所以,我的程序中有公司和员工实体。雇员为公司工作,在雇员表中有company_id(外键),我跟踪某些雇员为哪个公司工作。现在,如果我想更新该字段,如何更改公司员工正在工作? 我想更新员工类中的company_id,使用字段int companyId来引用该列,但是它不起作用。在员工服务实施中。类如果我想更新该列(这意味着员工不是为公司工作,或员工更改了公司),我必须调用公司类,这不是我想在员工表

  • 和 和 我的存储库:

  • 问题内容: 如何指定Spring Boot使用的数据库架构?我正在使用默认的hibernate(=默认)和postgres(但我希望一个通用的解决方案)。我知道如何指定JDBC URL: 但是不幸的是,postgresql不允许在JDBC URL中指定架构。我知道这里有hibernate属性hibernate.default_schema,所以我希望以下属性之一可以工作: 但是不幸的是,他们似乎都

  • 如何指定Spring Boot使用的数据库模式?我使用默认的hibernate(=默认)和postgres(但我希望有一个通用的解决方案)。我知道如何指定JDBC URL: 但不幸的是,postgresql不允许在JDBCURL中指定模式。我知道有hibernate属性,因此我希望以下属性之一能够正常工作: 但不幸的是,它们似乎都没有任何结果。