【问题标题】:Hibernate with existing databases使用现有数据库休眠
【发布时间】:2011-02-02 17:10:55
【问题描述】:

我正在尝试使用 hibernate 和 oracle 数据库构建一个 spring roo 项目。 oracle 数据库包含其他应用程序使用的表。

我有一个实体 User 已存在于数据库中,包含数千个用户并由另一个应用程序共享。

我的新 roo 项目包含用户实体以及其他一些实体。 persistence.xml 配置了以下属性:

<property name="hibernate.hbm2ddl.auto" value="update"/>

在第一次部署应用时,休眠失败,因为没有实体表。将值更改为“create”可以解决此问题,但会擦除用户表:(

有没有办法解决这个问题?我想做的是这个

  1. 属性值为“create”,但用户实体以某种方式被排除在外
  2. 部署应用程序,创建表等。使用现有用户表。
  3. 停止应用
  4. 将属性值修改为“更新”
  5. 没有数据丢失:)

非常感谢。

【问题讨论】:

    标签: java hibernate spring-mvc spring-roo


    【解决方案1】:

    必须有更好的方法来做到这一点,但这里有一个快速的技巧,可以让你按照你想要的步骤滚动:

    1. 将 Hibernate 映射中的表重命名为 user_unused
    2. 修改属性值为create
    3. 部署应用程序、创建表等,现有user 表保持不变。
    4. 停止应用
    5. 将 Hibernate 映射中的表重命名为 user
    6. 修改属性值为update
    7. 删除由Hibernate在步骤1中创建的user_unused数据库表

    【讨论】:

    • 谢谢詹姆斯,我们就是这么做的。希望有更好的方法,更不容易忘记重命名
    • 另一种方法是在重新创建所有表之前从现有的user 表中导入数据,然后重新填充新创建的user 表。我必须深入研究 Hibernate 源代码,看看是否有办法在每个表的基础上运行 DDL。
    【解决方案2】:

    我记得在一些hibernate论坛上,这个功能还没有从hibernate中获得。所以这是另一个黑客。您可以对“创建”使用 false,对“更新”使用 true。在这种情况下,您将需要配置所有课程。

    【讨论】:

      猜你喜欢
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多