目前我正在开发一个应用程序,使用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
当我们第二次运行程序时,它会收到错误,因为重复数据(数据已经存在于数据库中)。我们怎样才能避免这种情况?
非常感谢你的帮助。
答案 0 :(得分:0)
为什么错误,如果所有数据都存在于数据库中,只需跳过所有行即可,导入成功
答案 1 :(得分:0)
在阅读阶段,你必须建立一个代表' Director
+ Films
' (我想你可以用SB XML ItemReader免费获得这个。)
检查数据重复可以在处理阶段完成(如@zg_spring所写)。
在写作阶段,请director
插入并使用其新生成的ID作为关联的films
(当然还有film_director
);此操作应使用自定义ItemWriter
或嵌入ItemWriter
的服务组件手动完成(网上有很多示例)