简体   繁体   English

Unitils不起作用

[英]Unitils doesn't work

I have a big problem 我有一个大问题

my unitils.properties: 我的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: 我的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 problem with 6 and the same error: 我有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`))

My test is "search" not "delete" but I think when unitils trying delete row to start new test, have problem. 我的测试是“搜索”而不是“删除”,但我认为当单元尝试删除行开始新测试时,有问题。

anybody have idea ? 有谁有想法?

thanks 谢谢

Solution can be found on: https://sourceforge.net/p/unitils/discussion/570578/thread/38fe5abc/ 解决方案可以在以下网址找到: https//sourceforge.net/p/unitils/discussion/570578/thread/38fe5abc/

During a clean-insert, data is first deleted from all tables in reverse order as specified in the data set. 在清理插入期间,首先按照数据集中指定的相反顺序从所有表中删除数据。 After that, the data is inserted in the specified order. 之后,数据按指定顺序插入。 So for your data set 所以对于你的数据集


<TIME_SHEET /> <DATA /> <USUARIO />
it first deletes all records in usuario then data and then time_sheet since there appears to be FK from time_sheet to data (see exception), it cannot delete the data records before deleting the dependent time_sheet records Solution: just correct the order in the data set (put data before time sheet) 它首先删除usuario中的所有记录然后删除time_sheet中的所有记录,因为从time_sheet到数据似乎有FK(参见异常),它在删除依赖的time_sheet记录之前无法删除数据记录解决方案:只需更正数据集中的顺序(在时间表之前放数据)
\n    <DATA /> <DATA />\n    <TIME_SHEET /> <TIME_SHEET />\n    <USUARIO /> <USUARIO />\n    

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM