使用 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

初入spring boot(五 )Spring Data JPA

Spring Boot 的数据访问:JPA 和 MyBatis