使用 Spring Boot 在 JPA 中访问 MySQL 视图
Posted
技术标签:
【中文标题】使用 Spring Boot 在 JPA 中访问 MySQL 视图【英文标题】:Access MySQL view in JPA with Spring Boot 【发布时间】:2021-01-22 10:50:28 【问题描述】:我有一个连接到 mysql 数据库的 Spring Boot 应用程序,并且我已经能够使用这些表,但现在我创建了一个模型、存储库和服务来访问视图。我在控制器中创建了一条路由来处理此视图,我收到以下错误消息:
java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist
在 MySQL 工作台中,当我查看视图时,它看起来像这样:
CREATE
ALGORITHM = UNDEFINED
DEFINER = `root`@`%`
SQL SECURITY DEFINER
VIEW `db`.`my_view` AS
...
在 application.properties 中:
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://$HOSTNAME:localhost:$PORT:3306/$DB_NAME:db?serverTimezone=UTC
spring.datasource.username=$USERNAME:root
spring.datasource.password=$PASSWORD:password
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
我需要更改数据库中的定义器吗?我以与创建它时相同的用户身份登录。如果我需要添加任何信息,请告诉我,非常感谢任何帮助!
【问题讨论】:
【参考方案1】:修复错误的最简单方法是从 SQL 脚本中删除所有 DEFINER 语句。
【讨论】:
好的,谢谢!我尝试删除它(完全删除定义器),但是当我单击视图的编辑时,定义器再次出现,只是这次主机不是 %,而是 localhost。现在它可以在本地与我的 Spring Boot 应用程序一起使用,但例如,如果我想将它部署到 AWS,那么它仍然可以工作吗? @AlfieDanger DEFINER(和 SQL SECURITY)子句指定在例行执行时检查访问权限时要使用的安全上下文。以上是关于使用 Spring Boot 在 JPA 中访问 MySQL 视图的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2.x基础教程:使用Spring Data JPA访问MySQL
Spring Boot:在Spring Boot中使用Mysql和JPA
Spring boot , Spring data JPA 并发访问
Spring Boot2 系列教程 | 使用 Spring Data JPA 访问 Mysql