2017-01-10 4 views
0

현재 여러 개의 다 대다 관계가있는 테이블로 작업 중이며 최대 절전 모드를 사용하여이 모두를 구현하려고합니다.최대 절전 모드에서 여러 다 대일 관계의 루프에 고유 한 데이터 저장

예를 들어

, 세 개의 테이블 내가있는 한 :

그룹은 하나에

제품 (ID, PNAME), 사용자 (ID, PID, GID, UNAME), 그룹 (ID, gname는)

제품은 사용자와의 일대 다 관계에서 또한 -to-많은 사용자와의 관계

사용자 제품 및 그룹 모두 다 대일 관계에있다.

내가받을 데이터의 샘플은 다음과 같습니다 :

위의 예에서
Line 0: pname uname gname 
Line 1: Razer Billy admin 
Line 2: Razer Sally admin 
Line 3: Razer Benji admin 
Line 4: Yahoo Molly admin 
... 

, 내 제품 테이블에 세 가지 항목과 관련된 Razer의 만 두 항목 (Razer의 야후)와 끝까지 할 Users 테이블과 Yahoo는 Users 테이블의 한 항목과 연관되어 있습니다.

또한 내 그룹 테이블이 Users 테이블의 네 가지 항목과 관련된 항목 ("admin")으로 끝나기를 바랍니다. 나는 데이터의 새로운 라인을받을 때마다

지금까지, 어떻게 중복 항목이 제품에 대해 생성되지 않습니다 있는지 확인하고 그룹 테이블이 아니라 기존 거기에에 참조 할 수 있습니까? 5 호선의 데이터 인 경우

예를 들어, : Razer의 재키는 관리자는 어떻게이 항목은 항목 "의 Razer"와 "관리자"와 연결되어있는 동안 사용자 테이블에 새 항목 "재키"를 추가해야하나요 제품 및 그룹 테이블에 중복 항목을 생성하는 대신 이미 생성 된 항목입니까? 데이터에 대한

내 정확한 결함 루프는 다음과 같이 진행됩니다

// Three lists of same size created, 
// each list is a column of the sample data from above 
// ... 

Set<Users> users = new HashSet<Users>(); 
for(int i = 0; i < plist.size; i++){ 
    Product ptemp = new Product(plist.get(i)); 
    Group gtemp = new Group(glist.get(i)); 
    Users utemp = new Users(ptemp, gtemp, ulist.get(i)); 

    users.add(utemp); 

    ptemp.setUsers(users); 
    gtemp.setUsers(users); 

    session.save(ptemp); 
    session.save(gtemp); 
} 

감사합니다!

답변

1

제공 한 예를 참조하십시오. 당신은 새 행 삽입 할 - Razer의 재키 관리자

을 그것의 두 단계 과정을 모두 체크 첫 번째 제품 Razer의 및 그룹 관리자가 데이터베이스에있는 경우. '예'를로드하면로드하고 그렇지 않으면 새 오브젝트를 작성하십시오.

다음 단계는 처음 단계에서로드하거나 작성한 참조를 추가하여 사용자 데이터를 유지하기 만하면됩니다.

희망이 도움이됩니다.

+0

답변 해 주셔서 감사합니다. 계속해서, 제품과 그룹 모두에 최대 절전 모드 특수 효과 (계단식 지속)를 추가한다는 것을 명확하게 설명 하시겠습니까? 동일한 논리에 의해 최대 절전 모드 주석을 사용하여 데이터베이스에서 현재 상태를 확인할 수 있습니까? – 000000000000000000000

+1

기상 제품 또는 그룹이 이미 DB에 있는지 확실하지 않으므로. 당신은 명시 적으로 그들을로드하여로드해야합니다. '캐스케이드 '를 사용하여 수행 할 수 없습니다.이 경우 Cascade를 사용하면'product'와'group'에 중복 된 엔트리가 생기게됩니다. – Ubercool