Я создал все модели для своего весеннего загрузочного приложения и успешно указал отношение между ними согласно бизнес-логике c. В моем файле свойств я установил опцию hibernate auto-ddl as create, чтобы сгенерировать все таблицы в соответствии с отношениями между сущностями. Я также использую liquibase для миграции базы данных.
Проблема в том, что из журналов видно, что hibernate изменяет таблицу перед ее созданием и, следовательно, выдает исключение времени выполнения, в котором говорится "Таблица не найдена". Почему он изменяет таблицу перед ее созданием? Как решить эту проблему?
Любая помощь будет весьма заметна. Заранее спасибо.
Пример некоторых журналов
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)
Почему перед созданием "приложения" ожидается имя таблицы "APPLICATION"
@Table(name = "application")
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Application extends AbstractAuditingEntity implements Serializable {
private static final long serialVersionUID = 1L;
}
Я использую H2 База данных в разработке и MYSQL в производстве. Но ранее я использовал диалект "org.hibernate.dialect.MySQL5InnoDBDialect " в "application-dev.yml". Изменение его на диалект h2 ( org.hibernate.dialect.H2Dialect ) решило проблему.
Но какой диалект должен быть в application-prod.yml? Я использую MYSQL в производстве. Текущий диалект, который я здесь использую, это " org.hibernate.dialect.MySQL5InnoDBDialect ". Это еще больше создаст проблему при производстве.
application-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