spring - 休眠 JPA 春季启动
问题描述
我已经为我的 Spring Boot 应用程序创建了所有模型,并根据业务逻辑成功指定了它们之间的关系。在我的属性文件中,我将 hibernate auto-ddl 选项设置为 create 以根据实体之间的关系生成所有表。我也在使用 liquibase 进行数据库迁移。
问题是,从日志中我可以看到休眠在创建表之前正在更改它,因此抛出运行时异常说“找不到表”。为什么它在创建之前更改表?如何解决这个问题?
任何帮助都将是非常可观的。提前致谢。
一些日志示例
Error executing DDL "alter table application drop foreign key FKrtuepaxepo3o6x0pkn0w62ucg" via JDBC Statement.
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "APPLICATION" not found; SQL statement:
alter table application drop foreign key FKrtuepaxepo3o6x0pkn0w62ucg
.......
.......
.......
Hibernate: drop table if exists application
create table application (id bigint not null auto_increment
alter table application add constraint UK_5jl5nuoh207t0japuutb4avd4 unique (application_name)
为什么在创建“应用程序”之前期望表名为“应用程序”
@Table(name = "application")
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Application extends AbstractAuditingEntity implements Serializable {
private static final long serialVersionUID = 1L;
}
我在开发中使用 H2 数据库,在生产中使用 MYSQL。但是,以前,我在“application-dev.yml”中使用“org.hibernate.dialect.MySQL5InnoDBDialect ”方言。将其更改为 h2 方言(org.hibernate.dialect.H2Dialect)解决了这个问题。
但是,application-prod.yml 中的正确方言应该是什么?我在生产中使用 MYSQL。我在这里使用的当前方言是“ org.hibernate.dialect.MySQL5InnoDBDialect ”。这将进一步在生产中产生问题。
应用程序-prod.yml
datasource:
# type: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/appscoredb
username:
password:
hikari:
poolName: Hikari
auto-commit: false
# h2:
# console:
# enabled: true
# settings:
# web-allow-others: true
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
database: mysql
hibernate:
ddl-auto: none
show-sql: true
properties:
hibernate.id.new_generator_mappings: true
hibernate.connection.provider_disables_autocommit: true
hibernate.cache.use_second_level_cache: false
hibernate.cache.use_query_cache: false
hibernate.generate_statistics: false
liquibase:
# Remove 'faker' if you do not want the sample data to be loaded automatically
contexts: prod, faker
enabled: false
解决方案
它是通过使用这种方言来解决的:org.hibernate.dialect.MySQL5Dialect
我希望它可以在不久的将来帮助某人。
推荐阅读
- r - 顺序列总和
- web-services - 如何调用安全的 Web 服务
- php - 这个 sql 语句有什么问题,在 series_seasons = '12' 附近产生 mysqli 错误
- python - 有没有办法将正确格式的 json 信息写入 .json 文件并在本地读取?
- css - 在 Firefox 和 Chrome 上的不同位置使用锚链接和“定位粘性”位置页面的导航栏
- react-native - 我如何在 expo react native 应用程序中集成 Instagram 身份验证登录
- python - 在 Python 中通过错误处理请求用户输入的递归函数
- inno-setup - 更改设置框架的颜色
- python - 如何验证时间格式输入?
- node.js - 如何在使用 postgres 运行超级测试时修复“无法获取连接”错误