2013-06-20 2 views
0

У меня есть большая проблемаUnitils не работает

мои 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 

мой database.sql:

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@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 [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

У меня есть 65 тестов и у меня есть проблемы с 6 и та же ошибка:

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

Мой тест это «поиск», а не «удаление», но я думаю, что когда unitils пытаются удалить строку, чтобы начать новый тест, у вас проблема.

У кого-нибудь есть идея?

благодаря

ответ

1

Решение можно найти на: https://sourceforge.net/p/unitils/discussion/570578/thread/38fe5abc/

Во время очистки вставки, данные сначала удаляется из всех таблиц в обратном порядке, как указано в наборе данных. После этого данные вставляются в указанном порядке. Так для набора данных


<TIME_SHEET /> <DATA /> <USUARIO />
это первое удаляет все записи Новичка затем данные и затем time_sheet , так как представляется, FK от time_sheet к данным (см исключения), он не может удалить записи данных перед удалением зависимого time_sheet записи Решение: просто скорректируйте порядок в наборе данных (поместите данные до временного листа)
 
    <DATA /> 
    <TIME_SHEET /> 
    <USUARIO />