java - 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,要么使用其他机制之一来初始化数据库。
解决方案
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 生成
推荐阅读
- r - ggplot() 和 geom_smooth() 的问题
- vb.net - 由于阴影,Me 关键字无法在派生类中执行子例程
- javascript - 如何以格式(YYYY-MM-DD)获取时刻格式日期选择器的值
- ios - 如何在 swift 5.1 中设置 UICollectionView 的标题大小?
- javascript - Redux React-Native(在 react-redux 中使用 useSelector 与使用 connect 有什么区别?)
- amazon-web-services - 我可以使用 Aws Cognito 通过 Twitter 进行身份验证吗?
- pandas - 无法将多索引数据框写入 excel
- javascript - type="number" 在 onChange 中反应打字稿误报?
- c# - 为什么 EFcore PropertyEntry 'IsModified' 没用
- vba - VBA,如何快速检查文件是否存在(网络上的文件)