首页 > 解决方案 > spring-data-jpa ddl-auto 权限

问题描述

我的项目使用 spring-data-jpa。

公司规定测试环境和生成的环境数据库账号只有读写权限。

我发现当ddl-auto设置为none时,数据库结构也发生了变化,因为没有权限导致服务启动失败。如何设置ddl-auto属性,让程序不改变数据库也不做检查?

spring-data-jpa 文档:<a href="https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-database-initialization" rel="nofollow noreferrer" > https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-database-initialization

10.2. 使用 Hibernate 初始化数据库 您可以显式设置 spring.jpa.hibernate.ddl-auto,标准的 Hibernate 属性值为 none、validate、update、create 和 create-drop。Spring Boot 会根据它是否认为你的数据库是嵌入的来为你选择一个默认值。如果未检测到模式管理器或在所有其他情况下均未检测到,则默认为 create-drop。通过查看连接类型来检测嵌入式数据库。hsqldb、h2 和 derby 是嵌入的,而其他的则不是。从内存中切换到“真实”数据库时要小心,不要假设新平台中是否存在表和数据。您要么必须显式设置 ddl-auto,要么使用其他机制之一来初始化数据库。

标签: javaspringspring-bootspring-data-jpa

解决方案


spring.jpa.hibernate.ddl-auto=none

标准的 Hibernate 属性值为:create、update、create-drop、validate 和 none

create – Hibernate 首先删除现有表,然后创建新表。

更新——基于映射(注解或 XML)创建的对象模型与现有模式进行比较,然后 Hibernate 根据差异更新模式。即使应用程序不再需要现有的表或列,它也不会删除它们。

create-drop – 类似于 create,另外 Hibernate 将在所有操作完成后删除数据库。通常用于单元测试。

validate – Hibernate 只验证表和列是否存在,否则抛出异常。

none - 此值有效地关闭 DDL 生成


推荐阅读