Hibernate JPA Spring Boot - PullRequest
       3

Hibernate JPA Spring Boot

0 голосов
/ 31 января 2020

Я создал все модели для своего весеннего загрузочного приложения и успешно указал отношение между ними согласно бизнес-логике 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

1 Ответ

1 голос
/ 31 января 2020

Это решается с помощью этого диалекта: org.hibernate.dialect.MySQL5Dialect

Я надеюсь, что это может помочь кому-то в ближайшем будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...