是否可以使用EJB升级数据库模式?

时间:2008-10-30 19:08:00

标签: java ejb

假设我有一个EJB应用程序,它定义了一些实体和它们之间的关系。我认为可以从实体轻松创建数据库模式。所以现在应用程序可以工作,但过了一段时间后需要改变一些关系,例如一对一需要成为一对多,我可以升级我的数据库这样做而不会丢失旧数据吗?

3 个答案:

答案 0 :(得分:1)

当然可以!你需要做的事情取决于许多不同的因素:你使用哪种ORM?哪个EJB容器?哪个RDBMS?

通常以下步骤适用:

  1. 停止申请
  2. 备份数据库
  3. 编辑数据库架构
  4. 取消部署应用程序
  5. 使应用程序适应新架构。别忘了编辑ORM-Configuration!
  6. 重新部署应用程序
  7. 重新启动应用程序
  8. 要获得更详细(和有用)的答案,您必须向我们提供有关当前情况,您想要实现的目标以及您将要更改的内容的更多详细信息。

答案 1 :(得分:1)

如果使用Hibernate作为JPA实现,您可以传递属性hibernate.hbm2ddl.auto。如果您手动更改架构,则应考虑将其设置为“验证”。此外,你可以尝试“更新”,它应该处理简单的东西,而无需手动更改。

答案 2 :(得分:1)

听起来好像你让容器从你的实体中自动生成模式,所以你不必为了创建你自己的ORM而沮丧和肮脏(为什么不呢?)如果是这样的话,在Apache项目中有一个漂亮的工具称为DdlUtils你可能会觉得有用。

首先备份旧数据库,然后重新部署更新的应用程序以使用新架构生成空数据库。使用DdlUtils,您可以连接到这两个数据库,并生成将旧数据库迁移到新模式所需的SQL,从而保留您的数据。

如果您只是添加或删除表格或列,它就像一个魅力。当您执行更改列名称之类的操作时,我不知道它的工作情况。在这种情况下,您可能需要手动编辑sql。