假设我有一个EJB应用程序,它定义了一些实体和它们之间的关系。我认为可以从实体轻松创建数据库模式。所以现在应用程序可以工作,但过了一段时间后需要改变一些关系,例如一对一需要成为一对多,我可以升级我的数据库这样做而不会丢失旧数据吗?
答案 0 :(得分:1)
当然可以!你需要做的事情取决于许多不同的因素:你使用哪种ORM?哪个EJB容器?哪个RDBMS?
通常以下步骤适用:
要获得更详细(和有用)的答案,您必须向我们提供有关当前情况,您想要实现的目标以及您将要更改的内容的更多详细信息。
答案 1 :(得分:1)
如果使用Hibernate作为JPA实现,您可以传递属性hibernate.hbm2ddl.auto。如果您手动更改架构,则应考虑将其设置为“验证”。此外,你可以尝试“更新”,它应该处理简单的东西,而无需手动更改。
答案 2 :(得分:1)
听起来好像你让容器从你的实体中自动生成模式,所以你不必为了创建你自己的ORM而沮丧和肮脏(为什么不呢?)如果是这样的话,在Apache项目中有一个漂亮的工具称为DdlUtils你可能会觉得有用。
首先备份旧数据库,然后重新部署更新的应用程序以使用新架构生成空数据库。使用DdlUtils,您可以连接到这两个数据库,并生成将旧数据库迁移到新模式所需的SQL,从而保留您的数据。
如果您只是添加或删除表格或列,它就像一个魅力。当您执行更改列名称之类的操作时,我不知道它的工作情况。在这种情况下,您可能需要手动编辑sql。