Проверка схемы: отсутствует сообщение об ошибке [...] таблицы с использованием flyway для кода SQL, сгенерированного Hibernate - PullRequest
0 голосов
/ 25 января 2019

Я пытался решить некоторые проблемы, связанные с Flyway. Моя ситуация следующая: у меня есть два Java-класса, которые я хотел бы перенести как две схемы. Давайте назовем их Table и CustomTable. Мои классы Java выглядят так:

@Entity
public class xtable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
//getters, setters, constructors

@Entity
public class CustomTable{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String a;
private String b;
private String c;
//getters, setters, constructors

My application.properties:

spring.flyway.url=${env.var1}
spring.flyway.user=${env.var2}
spring.flyway.password=${env.var3}
spring.jpa.hibernate.ddl-auto=validate

//If I use create-drop, hibernate creates it, but after that the validation fails

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.logging.level.org.hibernate.SQL=debug
spring.jpa.show-sql=true
hibernate.temp.use_jdbc_metadata_defaults=true
spring.flyway.enabled=true

Мой build.gradle:

plugins {
    id "org.flywaydb.flyway" version "5.2.4"
}

dependencies {
    implementation 'org.flywaydb:flyway-core'
}

Ситуация настолько странная, потому что она даже не работает с автоматически сгенерированным кодом SQL, который я позволил программе создать без пролетного пути.

Это выглядит так:

    create table custom_table (
  id         bigint not null,
  a          varchar(255),
  b          varchar(255),
  c          varchar(255),
  xtable_id bigint,
  primary key (id)
)
  engine = InnoDB;

create table xtable (
  id                  bigint not null,
  name                varchar(255),
  xtable_id bigint,
  primary key (id)
)
  engine = InnoDB;

alter table custom_table
  add constraint FKep6vooglihwraille12muox9 foreign key (xtable_id) references xtable (id);

alter table xtable
  add constraint FK426q765pr4gv5wux6jaktafqk foreign key (custom_table_id) references custom_table (id);

Я также не понимаю, почему Hibernate создает один-единственный внешний ключ для каждого класса, но большая проблема в том, что я все еще получаю сообщение об ошибке

 Schema-validation: missing table [custom_table]

Я попытался переименовать custom_table в customtable (а также переименовать класс в Java), но сообщение об ошибке было таким же.

Вы когда-нибудь встречали такую ​​же проблему? Есть ли у вас какие-либо предложения? Я работал над этой проблемой, по крайней мере, 2 дня.

Я искал релевантные - или, казалось бы, идентичные - темы здесь, но я не мог найти хорошее решение.

Спасибо.

1 Ответ

0 голосов
/ 25 января 2019

Наконец-то у меня возникла проблема.Проблема была со вставкой нескольких внешних ключей.(Итак, эти две строки):

alter table custom_table
add constraint FKep6vooglihwraille12muox9 foreign key (xtable_id) references xtable (id);

alter table xtable
  add constraint FK426q765pr4gv5wux6jaktafqk foreign key (custom_table_id) references custom_table (id);

Я не мог понять, однако, причину, по которой Flyway не смог справиться с этим, но когда я воссоздал всю структуру с двумя таблицами и еще одной, содержащейправильные идентификаторы, делающие одно и то же во всем проекте, это сработало.

...