mysql - Flyway数据导入仅适用于MySQL,不适用于H2

标签 mysql hibernate h2 flyway

我有一个小的 Spring Boot 应用程序。具有默认配置文件和 mysql 配置文件。默认情况下,我想在内存模式下启动 H2 数据库。我使用两个 Flyway 文件初始化这两个数据库(数据库设置和一些测试数据)。 如果我在 mysql 模式下运行我的应用程序,一切正常。如果我在默认模式下运行应用程序,我不会得到测试数据,只会得到空表。唯一的不同是,我在控制台中收到 4 个 hibernate 外键错误。

控制台

2016-09-05 13:43:40.652  INFO 9152 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate Core {5.0.9.Final}
2016-09-05 13:43:40.654  INFO 9152 --- [  restartedMain] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2016-09-05 13:43:40.655  INFO 9152 --- [  restartedMain] org.hibernate.cfg.Environment            : HHH000021: Bytecode provider name : javassist
2016-09-05 13:43:40.699  INFO 9152 --- [  restartedMain] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2016-09-05 13:43:40.841  INFO 9152 --- [  restartedMain] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2016-09-05 13:43:41.415  INFO 9152 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
Hibernate: alter table address drop foreign key FK1a5lwjqa8jpvcavywjsurtelc
2016-09-05 13:43:41.417 ERROR 9152 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table address drop foreign key FK1a5lwjqa8jpvcavywjsurtelc
2016-09-05 13:43:41.417 ERROR 9152 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : Bedingung "FK1A5LWJQA8JPVCAVYWJSURTELC" nicht gefunden
Constraint "FK1A5LWJQA8JPVCAVYWJSURTELC" not found; SQL statement:
alter table address drop foreign key FK1a5lwjqa8jpvcavywjsurtelc [90057-192]
Hibernate: alter table contract drop foreign key FK5s7r1nq49s36ndq7nlri6hxf7
2016-09-05 13:43:41.417 ERROR 9152 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table contract drop foreign key FK5s7r1nq49s36ndq7nlri6hxf7
2016-09-05 13:43:41.418 ERROR 9152 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : Bedingung "FK5S7R1NQ49S36NDQ7NLRI6HXF7" nicht gefunden
Constraint "FK5S7R1NQ49S36NDQ7NLRI6HXF7" not found; SQL statement:
alter table contract drop foreign key FK5s7r1nq49s36ndq7nlri6hxf7 [90057-192]
Hibernate: drop table if exists address
Hibernate: drop table if exists company
Hibernate: drop table if exists contract
Hibernate: drop table if exists user
Hibernate: create table address (id bigint not null auto_increment, city varchar(255), country varchar(255), post_code varchar(255), street varchar(255), street_number varchar(255), primary key (id))
Hibernate: create table company (id bigint not null auto_increment, name varchar(255), primary key (id))
Hibernate: create table contract (id bigint not null auto_increment, billing_cycle varchar(255), description varchar(255), contract_number varchar(255), costs integer, conditions varchar(255), first_possible_end_date date, notice_period_in_days integer, start_date date, user_id bigint, primary key (id))
Hibernate: create table user (id bigint not null auto_increment, birth_date date, first_name varchar(255), last_name varchar(255), password varchar(255), username varchar(255), primary key (id))
Hibernate: alter table address add constraint FK1a5lwjqa8jpvcavywjsurtelc foreign key (id) references company (id)
Hibernate: alter table contract add constraint FK5s7r1nq49s36ndq7nlri6hxf7 foreign key (user_id) references user (id)
2016-09-05 13:43:41.433  INFO 9152 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete
2016-09-05 13:43:41.473  INFO 9152 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2016-09-05 13:43:42.066  INFO 9152 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@9b60977: startup date [Mon Sep 05 13:43:36 CEST 2016]; root of context hierarchy

应用程序属性

# Database
spring.datasource.url=jdbc:h2:mem:application;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled = true

spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl =false
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop

application-mysql.properties

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/application
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=

spring.jpa.generate-ddl =false
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

spring.datasource.testWhileIdle = true
spring.datasource.timeBetweenEvictionRunsMillis = 3600000
spring.datasource.validationQuery = SELECT 1

V0_0_0_0__init.sql

CREATE TABLE COMPANY (
  ID BIGINT NOT NULL,
  NAME VARCHAR(255) NULL,
  PRIMARY KEY (ID)
)ENGINE=InnoDB;

CREATE TABLE USER (
  ID BIGINT NOT NULL,
  FIRST_NAME VARCHAR(255) NULL,
  LAST_NAME VARCHAR(255) NULL,
  BIRTH_DATE DATE NULL,
  USERNAME VARCHAR(255) NOT NULL,
  PASSWORD VARCHAR(255) NOT NULL,
  PRIMARY KEY (ID),
  UNIQUE INDEX USERNAME_UNIQUE (USERNAME ASC)
)ENGINE=InnoDB;

CREATE TABLE CONTRACT (
  ID BIGINT NOT NULL,
  COMPANY_ID BIGINT(20) NOT NULL,
  CONTRACT_NUMBER VARCHAR(255) NOT NULL,
  START_DATE DATE NOT NULL,
  FIRST_POSSIBLE_END_DATE DATE NOT NULL,
  NOTICE_PERIOD_IN_DAYS INTEGER NOT NULL,
  COSTS INTEGER NOT NULL,
  BILLING_CYCLE VARCHAR(40) NOT NULL,
  CONDITIONS VARCHAR(255) NOT NULL,
  COMMENTS VARCHAR(255) NOT NULL,
  USER_ID BIGINT,
  PRIMARY KEY (ID),
  FOREIGN KEY (COMPANY_ID) REFERENCES COMPANY(ID),
  FOREIGN KEY (USER_ID) REFERENCES USER(ID)
)ENGINE=InnoDB;

CREATE TABLE ADDRESS (
  ID BIGINT NOT NULL,
  POST_CODE VARCHAR(10) NOT NULL,
  COUNTRY VARCHAR(45) NOT NULL,
  CITY VARCHAR(45) NOT NULL,
  STREET VARCHAR(45) NOT NULL,
  STREET_NUMBER VARCHAR(255) NOT NULL,
  COMPANY_ID BIGINT,
  PRIMARY KEY (ID),
  FOREIGN KEY (COMPANY_ID) REFERENCES COMPANY(ID)
)ENGINE=InnoDB;

V0_0_0_1__testdata.sql

INSERT INTO COMPANY
    (ID,NAME)
VALUES
    (1,'Telekom'),
    (2,'Allianz'),
    (3,'ADAC'),
    (4,'Vodafon');

INSERT INTO USER
    (ID,FIRST_NAME,LAST_NAME,BIRTH_DATE,USERNAME,PASSWORD)
VALUES
    (1,'Max','Muster','1991-08-29','max.muster','1234'),
    (2,'Peter','Silie','1992-07-03','peter.silie','1234'),
    (3,'Klär','Grube','1990-03-01','klär.grube','1234');

INSERT INTO CONTRACT
    (ID,COMPANY_ID,CONTRACT_NUMBER,START_DATE,FIRST_POSSIBLE_END_DATE,NOTICE_PERIOD_IN_DAYS,COSTS,BILLING_CYCLE,CONDITIONS,COMMENTS,USER_ID)
VALUES
  (1,1,'123456789','2014-01-01','2016-01-01',90,'5000','MONTHLY','SMS Flat, Telefonie Flat, 1GB','',1),
  (2,2,'543765687','2015-07-15','2015-08-15',30,'500','YEARLY','5.000.000, Fahrradversicherung','',3),
  (3,3,'743912309','2016-03-31','2017-03-31',30,'1499','YEARLY','ADAC Plus','',2),
  (4,4,'777666888','2013-04-10','2013-04-10',90,'4500','MONTHLY','SMS Flat, Telefonie Flat, 2GB','',1);

INSERT INTO ADDRESS
    (ID,POST_CODE,COUNTRY,CITY,STREET,STREET_NUMBER,COMPANY_ID)
VALUES
    (1,'12345','GERMANY','Berlin','Hauptstrasse','3',1),
    (2,'12345','GERMANY','Berlin','Hauptstrasse','2',2),
    (3,'12345','GERMANY','Berlin','Hauptstrasse','26b',3),
    (4,'12345','GERMANY','Berlin','Hauptstrasse','5',4);

最佳答案

可能是外键名称和大小写转换的问题。尝试将您的 FK 命名为:

CONSTRAINT FK_ADDRESS_COMPANY FOREIGN KEY (COMPANY_ID) REFERENCES COMPANY(ID)

关于mysql - Flyway数据导入仅适用于MySQL,不适用于H2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39330200/

相关文章:

java - Hibernate Criteria 限制选择

java - 在 Hibernate 中将对象从查询转换为其他类?

java - 为什么 h2 数据库驱动程序 (JPA) 不创建表,而 postgres 却创建表

mysql - 将 yymmdd 日期与今天进行比较

mysql - := denote within the context of a placeholder 是什么意思

javascript - 使用 Opera mini 和 UC 浏览器时 MySQL 值未更新?

java - 我应该如何对数据库进行建模,以便数据库中的每个学生实体都有与每个类(class)实体相关的成绩?

sql - 将NOT_NULL约束添加到SQL列

java - 生成具有自动增量的 String 类型的长数字 id

使用 SHA256 的 PHP 登录脚本