2016-09-05 67 views
0

我有一点弹簧启动应用程序。使用默认配置文件和mysql配置文件。默认情况下,我想以inMemory模式启动H2数据库。两个数据库我都用两个flyway文件初始化(数据库设置和一些测试数据)。 如果我在mysql模式下运行我的应用程序,一切正常。如果我在默认模式下运行应用程序,那么我不会得到testdata,只有emtpy表。唯一不同的是,我在控制台中获得了4个hibernate外键错误。Flyway数据导入仅适用于MySQL,不适用于H2

控制台

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[email protected]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 

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); 

回答

0

解决方案:

application.properties

spring.jpa.hibernate.ddl-auto=none

,然后才上创建降。 所以flyway设置数据库,hibernate将其删除并重新创建。 为什么它在mysql数据库的mysql模式下工作我不知道。

0

可能是与外键和大小写转换的名称的问题。尝试命名FKS,如:

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

它没有影响。和以前一样的问题。 – Woody

相关问题