Java DBUnit-完整性约束冲突:外键不动作;系统FK_10556
我目前正在使用dbunit(使用hsqldb)编写测试代码。但是,我在初始化数据库时遇到了一个很大的问题: 代码如下:Java DBUnit-完整性约束冲突:外键不动作;系统FK_10556,java,database,eclipse,unit-testing,dbunit,Java,Database,Eclipse,Unit Testing,Dbunit,我目前正在使用dbunit(使用hsqldb)编写测试代码。但是,我在初始化数据库时遇到了一个很大的问题: 代码如下: /** * Init before a test starts */ @Before public void initialise() { IDataSet dataSetRating = null; IDataSet dataSetMovie = null; log.info("enter
/**
* 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,
);
<?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>
我的startDatabaseRating.xml如下所示:
CREATE TABLE Rating
(
rid INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
mid INTEGER FOREIGN KEY REFERENCES Movie(movieId),
rating INTEGER NOT NULL,
);
<?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>
插入分级时,引用的电影必须已经存在于
电影
表中。因此,您按错误的顺序插入了行
您需要先插入电影,然后插入收视率
<?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>
此外,我建议您在列中使用常规标签,尤其是id和外键,因为如果有一天由另一个人负责您的代码,它更容易理解和维护
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<Movie id="0" title="Movie1" moviePath="C" />
<Movie id="1" title="Movie2" moviePath="D" />
<Rating id="0" movie_id="0" rating="1" />
<Rating id="1" movie_id="0" rating="2" />
<Rating id="2" movie_id="0" rating="3" />
<Rating id="3" movie_id="0" rating="4" />
</dataset>
show us“create table”for Movie我用“create table”电影更新了我的帖子。。。