Flyway 数据导入仅适用于 MySQL,不适用于 H2
Flyway data import works only for MySQL not for H2
我有一个 Spring 启动应用程序。使用默认配置文件和 mysql 配置文件。默认情况下,我想以内存模式启动 H2 数据库。我用两个 flyway 文件初始化了两个数据库。(数据库设置和一些测试数据)。
如果我 运行 我的应用程序在 mysql 模式下一切正常。如果我 运行 默认模式下的应用程序我得不到测试数据,只有空表。唯一不同的是,我在控制台中得到 4 个休眠外键错误。
控制台
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
application.properties
# 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
申请-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)
解决方案:
application.properties
spring.jpa.hibernate.ddl-auto=none
在创建删除之前。
所以 flyway 设置数据库,hibernate 删除它并重新创建它。
我不知道为什么它在 mysql 数据库上以 mysql 模式工作。
我有一个 Spring 启动应用程序。使用默认配置文件和 mysql 配置文件。默认情况下,我想以内存模式启动 H2 数据库。我用两个 flyway 文件初始化了两个数据库。(数据库设置和一些测试数据)。 如果我 运行 我的应用程序在 mysql 模式下一切正常。如果我 运行 默认模式下的应用程序我得不到测试数据,只有空表。唯一不同的是,我在控制台中得到 4 个休眠外键错误。
控制台
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
application.properties
# 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
申请-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)
解决方案:
application.properties
spring.jpa.hibernate.ddl-auto=none
在创建删除之前。 所以 flyway 设置数据库,hibernate 删除它并重新创建它。 我不知道为什么它在 mysql 数据库上以 mysql 模式工作。