询问如何将数据插入到许多表中(具有关系)并避免重复数据错误

时间:2014-11-13 02:51:26

标签: spring spring-batch

目前我正在开发一个应用程序,使用Spring Batch(https://github.com/samuelwilsone/filmdata)将数据从XML导入MySQL。

这是我第一次使用Spring Batch,请您指导我如何解决以下问题:

我有5张桌子(演员,导演,电影,电影参与者,电影导演)。每个导演都可以有超过1部电影,所以我想实现将新导演插入“导演”表并将id用于插入“film_directors”表的程序。如果导演已经存在,程序将获得id并插入“film_directors”表。演员很相似。

示例:

有2个文件(AVATAR.xml,TITANIC.xml),我想像这样插入数据库:

--- Table "films":
AVATAR, AVATAR 2009, 7.9
TITANIC, TITANIC 1997, 7.7

--- Table "director":
1, James Cameron

--- Table "film_directors":
AVATAR, 1
TITANIC, 1

当我们第二次运行程序时,它会收到错误,因为重复数据(数据已经存在于数据库中)。我们怎样才能避免这种情况?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

为什么错误,如果所有数据都存在于数据库中,只需跳过所有行即可,导入成功

答案 1 :(得分:0)

在阅读阶段,你必须建立一个代表' Director + Films' (我想你可以用SB XML ItemReader免费获得这个。)

检查数据重复可以在处理阶段完成(如@zg_spring所写)。

在写作阶段,请director插入并使用其新生成的ID作为关联的films(当然还有film_director);此操作应使用自定义ItemWriter或嵌入ItemWriter的服务组件手动完成(网上有很多示例)