Unitils not working

I have a big problem

my unitils.properties:

database.driverClassName=com.mysql.jdbc.Driver database.url=jdbc:mysql://localhost/timesheet_test database.userName=root database.password= database.schemaNames=timesheet_test database.dialect=mysql updateDataBaseSchema.enabled=true dbMaintainer.script.locations=src/test/resources/dbscripts dataSetStructureGenerator.xsd.dirName=target/xsd dbMaintainer.autoCreateExecutedScriptsTable=true dbMaintainer.disableConstraints.enabled=false ## MΓ³dulos do unitils unitils.module.database.enabled=true unitils.module.dbunit.enabled=true unitils.module.hibernate.enabled=true unitils.module.spring.enabled=true unitils.module.mock.enabled=false unitils.module.easymock.enabled=false unitils.module.inject.enabled=false unitils.module.jpa.enabled=false DatabaseModule.Transactional.value.default=rollback 

my database.sql:

 SET @ OLD_UNIQUE_CHECKS=@ @UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @ OLD_FOREIGN_KEY_CHECKS=@ @FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @ OLD_SQL_MODE=@ @SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; CREATE SCHEMA IF NOT EXISTS `timesheet_test` DEFAULT CHARACTER SET latin1 ; USE `timesheet_test` ; -- ----------------------------------------------------- -- Table `timesheet_test`.`DATA` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `timesheet_test`.`DATA` ( `ID_DATA` BIGINT(20) NOT NULL AUTO_INCREMENT , `DATA` DATETIME NOT NULL , PRIMARY KEY (`ID_DATA`) , UNIQUE INDEX `data_UNIQUE` (`DATA` ASC) , UNIQUE INDEX `ID_DIAS_UNIQUE` (`ID_DATA` ASC) ) ENGINE = InnoDB AUTO_INCREMENT = 1000 DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- -- Table `timesheet_test`.`USUARIO` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `timesheet_test`.`USUARIO` ( `ID_USUARIO` BIGINT(20) NOT NULL AUTO_INCREMENT , `E_MAIL` VARCHAR(100) NOT NULL , `SENHA` VARCHAR(10) NOT NULL , `NOME` VARCHAR(100) NULL DEFAULT NULL , PRIMARY KEY (`ID_USUARIO`) , UNIQUE INDEX `E_MAIL_UNIQUE` (`E_MAIL` ASC) , UNIQUE INDEX `ID_USUARIO_UNIQUE` (`ID_USUARIO` ASC) ) ENGINE = InnoDB AUTO_INCREMENT = 1000 DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- -- Table `timesheet_test`.`TIME_SHEET` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `timesheet_test`.`TIME_SHEET` ( `ID_TIME_SHEET` BIGINT(20) NOT NULL AUTO_INCREMENT , `INICIO` VARCHAR(8) NOT NULL , `FIM` VARCHAR(8) NOT NULL , `LONGITUDE` DOUBLE NULL DEFAULT NULL , `LATITUDE` DOUBLE NULL DEFAULT NULL , `OBSERVACAO` VARCHAR(200) NULL DEFAULT NULL , `ID_DATA` BIGINT(20) NOT NULL , `ID_USUARIO` BIGINT(20) NOT NULL , PRIMARY KEY (`ID_TIME_SHEET`) , UNIQUE INDEX `ID_TIME_SHEET_UNIQUE` (`ID_TIME_SHEET` ASC) , INDEX `FK9735054D39B29F66` (`ID_DATA` ASC) , INDEX `FK9735054D9DA5550A` (`ID_USUARIO` ASC) , CONSTRAINT `FK9735054D9DA5550A` FOREIGN KEY (`ID_USUARIO` ) REFERENCES `timesheet_test`.`USUARIO` (`ID_USUARIO` ), CONSTRAINT `FK9735054D39B29F66` FOREIGN KEY (`ID_DATA` ) REFERENCES `timesheet_test`.`DATA` (`ID_DATA` )) ENGINE = InnoDB AUTO_INCREMENT = 1000 DEFAULT CHARACTER SET = latin1; USE `timesheet_test` ; SET SQL_MODE=@OLD _SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD _FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD _UNIQUE_CHECKS; 

I have 65 tests and I have a problem with 6 and the same error:

 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`timesheet_test`.`time_sheet`, CONSTRAINT `FK9735054D39B29F66` FOREIGN KEY (`ID_DATA`) REFERENCES `DATA` (`ID_DATA`)) 

My test is a "search", not a "delete", but I think that when unitils tries to delete a line to start a new test, you have problems.

Does anyone have an idea?

thanks

0
source share
1 answer

The solution can be found at: https://sourceforge.net/p/unitils/discussion/570578/thread/38fe5abc/

During a clean insertion, data is first deleted from all tables in the reverse order, as indicated in the data set. After that, the data is inserted in the specified order. Therefore for your dataset


<TIME_SHEET /> <DATA /> <USUARIO />
it first deletes all records in usuario, then data, and then time_sheet since it seems to be FK from time_sheet to data (see exception), it cannot delete data records before deleting time_sheet dependent records Solution: just correct the order in the data set ( put the data in front of the time sheet)
  <DATA />
     <TIME_SHEET />
     <USUARIO />
    
+1
source

Source: https://habr.com/ru/post/1203700/


All Articles