假设我有一个 EJB 应用程序,它定义了一些实体和它们之间的关系。我认为可以从实体轻松创建数据库模式。所以现在应用程序可以工作,但一段时间后需要改变一些关系,例如一对一需要变成一对多,我可以升级我的数据库来这样做而不丢失旧数据吗?
cntluz
问问题
333 次
3 回答
1
听起来您让容器从您的实体中自动生成模式,这样您就不必费力地创建自己的 ORM(为什么不呢?)如果是这样,Apache 项目中有一个名为 DdlUtils 的漂亮工具你可能会觉得有用。
首先备份旧数据库,然后重新部署更新后的应用程序以使用新架构生成一个空数据库。使用 DdlUtils,您可以连接到两个数据库并让它生成将旧数据库迁移到新模式所需的 SQL,从而保留您的数据。
如果您只是添加或删除表或列,它就像一个魅力。我不知道当您执行更改列名之类的操作时效果如何。在这种情况下,您可能需要手动编辑 sql。
于 2008-11-15T15:54:50.240 回答
1
如果使用 Hibernate 作为 JPA 实现,您可以传递属性 hibernate.hbm2ddl.auto。如果您手动更改架构,您应该考虑将其设置为“验证”。您也可以尝试“更新”,它应该处理简单的东西而无需手动更改。
于 2008-11-02T19:53:44.340 回答
1
当然可以!您必须做什么取决于许多不同的因素:您使用哪种 ORM?哪个 EJB 容器?哪个关系型数据库?
通常适用以下步骤:
- 停止应用程序
- 备份您的数据库
- 编辑您的数据库架构
- 取消部署应用程序
- 使应用程序适应您的新模式。不要忘记编辑您的 ORM 配置!
- 重新部署应用程序
- 重新启动应用程序
要获得更详细(和有帮助)的答案,您必须向我们提供有关当前情况、您想要实现的目标以及您将要改变的内容的更多详细信息。
于 2008-10-30T21:56:54.173 回答