Mat*_*ari 4 java spring hibernate h2 spring-boot
我通过 Spring Boot 在我的 Java 应用程序中使用嵌入式 H2。目前,它在数据库中创建(覆盖)我的表。但是,一旦我将其投入生产,我不希望我的表被擦除并重新创建,因此我不会丢失表中以前的数据。但我不知道如何实现这一点。不知道该放什么就行了 spring.jpa.hibernate.ddl-auto=create。我尝试了验证和其他选项,但没有成功。这是我的 application.properties。谢谢
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true
spring.datasource.initialization-mode=always
spring.jpa.hibernate.naming.physical-
strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Run Code Online (Sandbox Code Playgroud)
Dai*_*Day 11
您应该在这里使用更新:
spring.jpa.hibernate.ddl-auto=update
Run Code Online (Sandbox Code Playgroud)
如果表尚未定义,这将在启动时构建表,否则将保持原样。
另外,当您这样做时,您可能需要删除该行:
spring.jpa.generate-ddl=true
Run Code Online (Sandbox Code Playgroud)
最后,最好的方法是为不同的环境设置不同的属性集,或者将它们作为运行时变量传递,或者理想情况下使用 spring 配置服务器之类的东西将它们外部化。
您可以显式设置 spring.jpa.hibernate.ddl-auto ,标准 Hibernate 属性值为none、validate、update、create 和 create-drop
\n\nSpring Boot 根据它是否认为您的数据库是嵌入式的来为您选择一个默认值。如果未检测到模式管理器或在所有其他情况下均未检测到模式管理器,则默认为 create-drop。通过查看连接类型来检测嵌入式数据库。hsqldb、h2 和 derby 是嵌入式的,其他则不是。从内存数据库切换到 \xe2\x80\x98real\xe2\x80\x99 数据库时要小心,不要假设新平台中的表和数据是否存在。您必须显式设置 ddl-auto 或使用其他机制之一来初始化数据库
\n\n以下案例可能适合您:
\n\n更新:
\n\n例如,更新操作将尝试添加新的列、约束等,但永远不会删除先前可能已存在但不再作为先前运行的对象模型的一部分的列或约束。
\n\n没有任何:
\n\n在生产中,通常强烈建议您不使用或干脆不指定此属性。这是因为 DBA 的常见做法是检查数据库更改的迁移脚本,特别是在多个服务和应用程序之间共享数据库的情况下。
\n\n此外,如果 Hibernate 从头开始创建模式(即,如果 ddl-auto 属性设置为 create 或 create-drop),则在启动时执行类路径根目录中名为 import.sql 的文件。如果您小心的话,这对于演示和测试很有用,但可能不是您希望在生产中的类路径中出现的东西。这是一个 Hibernate 功能(与 Spring 无关)。
\n| 归档时间: |
|
| 查看次数: |
42859 次 |
| 最近记录: |