2013-01-05 57 views
4

我目前正在使用dbunit编码测试(使用hsqldb)。不过,我有一个巨大的问题,在初始化数据库:DBUnit - 完整性约束违规:外键无操作; SYS_FK_10556

here`s代码:

/** 
    * Init before a test starts 
    */ 
    @Before 
    public void initialise() { 
     IDataSet dataSetRating = null; 
     IDataSet dataSetMovie = null; 

     log.info("enter init test"); 

     try { 
      con = datasource.getConnection(); 
      icon = new DatabaseConnection(con); 
      File rating = new File("./src/test/resources/startDatabaseRating.xml");   
      dataSetRating = new FlatXmlDataSetBuilder().build(rating); 
      DatabaseOperation.CLEAN_INSERT.execute(icon, dataSetRating); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      log.error(e); 
      System.exit(-1); 
     } 
    } 

我的create语句看起来像这样:

CREATE TABLE Rating 
(
    rid INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, 
    mid INTEGER FOREIGN KEY REFERENCES Movie(movieId), 
    rating INTEGER NOT NULL, 
); 

和我startDatabaseRating.xml看起来像即:

<?xml version="1.0" encoding="UTF-8"?> 
<dataset> 
    <Rating rid="0" mid="0" rating="1" /> 
    <Rating rid="1" mid="0" rating="2" /> 
    <Rating rid="2" mid="0" rating="3" /> 
    <Rating rid="3" mid="0" rating="4" /> 

    <Movie movieid="0" title="Movie1" moviePath="C" /> 
    <Movie movieid="1" title="Movie2" moviePath="D" /> 
</dataset> 

当我运行测试,我得到:

java.sql.SQLIntegrityConstraintViolationException:完整性 约束违规:外键无操作; SYS_FK_10556表: RATING

为什么会出现这个异常,导致仍有在* .xml文件的数据集。如何解决这个问题?

UPDATE:

CREATE TABLE Movie 
(
    movieId INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, 
    title VARCHAR(255) NOT NULL, 
    moviePath VARCHAR(500) NOT NULL 
); 
+0

哪个db你在用? –

+0

我正在使用hsqldb ... – maximus

+0

向我们展示“创建表”电影 –

回答

11

当插入的评价,认为引用的电影必须已经存在于movie表。所以你是以错误的顺序插入行。

您需要先插入电影,,然后的收视率。

<?xml version="1.0" encoding="UTF-8"?> 
<dataset> 
    <Movie movieid="0" title="Movie1" moviePath="C" /> 
    <Movie movieid="1" title="Movie2" moviePath="D" /> 

    <Rating rid="0" mid="0" rating="1" /> 
    <Rating rid="1" mid="0" rating="2" /> 
    <Rating rid="2" mid="0" rating="3" /> 
    <Rating rid="3" mid="0" rating="4" /> 
</dataset> 
相关问题