当前位置: 首页 > 知识库问答 >
问题:

使用hibernate spring boot更新数据库架构

孙恩
2023-03-14

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

spring.jpa.hibernate.ddl-auto=update

共有1个答案

归翔
2023-03-14

我这样做的方法是在创建会话工厂时从外部配置文件中读取值,希望这有帮助:

private Properties hibernateProperties() 
{
    Properties properties = new Properties();
    properties.put("hibernate.connection.driver_class","net.sourceforge.jtds.jdbc.Driver");
    properties.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");

    if (environment.getProperty("dbReset").compareTo("ON") == 0)
    {
        properties.put("hbm2ddl.auto", "create");
        properties.put("hibernate.hbm2ddl.auto", "create");
    }

    properties.put("javax.persistence.validation.mode", "none");
    properties.put("hibernate.jdbc.batch_size", "50");
    properties.put("hibernate.cache.use_second_level_cache", "false");
    properties.put("hibernate.c3p0.min_size", "50");
    properties.put("hibernate.c3p0.max_size", "100");
    properties.put("hibernate.c3p0.timeout", "300");
    properties.put("hibernate.c3p0.max_statements", "50");
    properties.put("hibernate.c3p0.idle_test_period", "3000");

    return properties;        
}

这允许我在添加新功能时对基础数据库进行结构更改时完全重置数据库。我还有一种方法可以创建以类似方式工作的测试数据。

您会注意到我在那里有2个属性。已经有一段时间了,但我似乎记得类似的问题,当时我只有一个。我确实知道一个事实,如果我向实体添加一列并且我的dbReset模式处于开启状态,那么Hibernate每次都会为我处理好一切。

 类似资料:
  • 问题内容: update 我可以创建我的数据库架构,它会自动添加属性,约束,键等。但是,更新数据库架构又如何呢?如果我从实体中删除了某些属性,hibernate则不会删除它,或者如果我更改了某些约束,则hibernate不会触及已经创建的约束… 那么,有没有一种方法可以使hibernate状态真正更新数据库架构? 谢谢。 问题答案: 我们为自己创建了一个工具,该工具创建了必要的数据库列和表,并将其

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

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

  • 全部的 只是想看看用表单中提交的数据更新数据库行的最佳选项是什么。我理解Laravel更新查询生成器,但是我在如何获取表单数据,然后执行该查询方面遇到了困难。相对较新的Laravel:)这是我想出的,只是从我的PHP经验和逻辑: 我曾试图将查询放入一个函数中,然后让表单操作成为函数: 正如我所说,主要问题是试图让命名的表单对象成为更新行的对象。我有两个文本输入字段,分别命名为“body”和“not

  • 我正在获取一个-无法更新Activiti数据库架构:来自数据库“5.20.0.1”的未知版本?知道为什么会出现这个错误吗?我使用的是Activiti-Engine-5.18.0 jar 我正在尝试使用Eclipse在Alfresco Activiti之外部署一个进程。

  • 我想知道ehcache是否有办法检测数据库更新/插入(spring/java,hibernate web应用程序),并使用数据库中的当前(最新)数据刷新其缓存。如果没有,检测数据库更新的最佳方法是什么,以保持与缓存和数据库之间的数据同步?