2014-11-13 2 views
0

현재 스프링 배치 (https://github.com/samuelwilsone/filmdata)를 사용하여 XML에서 MySQL로 데이터를 가져 오는 응용 프로그램을 개발 중입니다.많은 테이블에 데이터를 삽입하고 관계가 중복되지 않도록하는 방법에 대해 문의하십시오.

내가 5 개 테이블 (배우, 감독, 영화, film_actors, film_directors)가 :

이 그래서 당신은 방법을 아래에 몇 가지 문제를 해결하는 나를 인도시겠습니까 나는 스프링 배치 함께 일하고 있어요 이번이 처음이다. 각 디렉터는 1 개 이상의 영화를 가질 수 있으므로 새 디렉터를 "디렉터"테이블에 삽입하고 "film_directors"테이블에 삽입하는 데 사용할 아이디를 얻는 프로그램을 구현하고 싶습니다. 디렉터가 이미 존재하면 프로그램은 id를 가져 와서 "film_directors"테이블에 삽입합니다. 배우도 비슷합니다.

예 :이 개 파일 (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

오류가 데이터베이스에있는 모든 datas의 exeist, 그냥 모든 행을 건너 뛸 경우 확인 왜, 읽기 단계에서 가져 오기 성공

+0

예, 이해하고 있습니다. 그러나 첫 번째 문제는 "director"테이블에 먼저 삽입하고 "films"및 "film_director"에 삽입 할 ID를 얻는 방법은 무엇입니까? 너 나 좀 도와 줄 수있어? – Samuel

0

당신은 나타내는 개체 모델을 구축해야 '를 Director + Films'(나는 당신이 얻을 수 있다고 생각 SB XML ItemReader로 무료로 제공).

데이터 복제 확인은 처리 단계에서 수행 할 수 있습니다 (@zg_spring 작성).

쓰기 단계 중에 films (및 film_director 물론)에 대해 생성 된 새 ID를 삽입하여 사용하십시오. 이 작업은 ItemWriter 사용자 정의 또는 ItemWriter에 포함 된 서비스 구성 요소를 사용하여 수동으로 수행해야합니다 (예 : 완전한 예제)

+0

친애하는 Luca Basso Ricci, 도움을 주셔서 감사합니다. 죄송하지만 문제를 해결해 줄 수 있습니까? 아니면, 내 소스 코드 (https://github.com/samuelwilsone/filmdata)에서 변경할 수 있도록 도와 주시겠습니까? 많은 감사합니다. – Samuel

+0

미안하지만 여가 시간이별로 없습니다. 기본적으로 XML 파일에서 'FileDetail \ FilmInformation'태그를 읽어야합니다. 당신은 그 새로운 정보로'영화'수업을 풍요롭게해야합니다. 일단 모든 정보를 얻으면 작업을 쉽게 처리 할 수 ​​있습니다. –

관련 문제