2017-04-26 2 views
0

OneToMany 매핑을 위해 최대 절전 모드에서 삽입을 수행하는 중. 동일한 데이터가 두 번 삽입됩니다.최대 절전 모드에서 OneToMany 매핑을위한 중복 데이터

직원 :

@Entity 
public class Employee { 
    @Id 
    @GeneratedValue 
    private int empId; 
    private String name; 
    private String designation; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "employee", fetch = FetchType.EAGER, orphanRemoval = true) 
    private Set<Address> addresses = new HashSet<>(); 
} 

주소 :

@Entity 
public class Address { 
    @Id 
    @GeneratedValue 
    private int addressID; 
    private String city; 
    private String country; 

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinColumn(name = "empId") 
    @JsonIgnore 
    private Employee employee; 
} 

나는 데이터 저장 POST 요청을 사용하는 경우 : 2에 대한

{ 
    "name": "Test1", 
    "designation": "SAL1", 
    "addresses": [ 
    { 
     "city": "Delhi", 
     "country": "India" 
    }, 
    { 
     "city": "Noida", 
     "country": "India" 
    } 
    ] 
} 

저장 요청 : 1 직원에 대한 저장 요청을 직원 :

{ 
    "name": "Test2", 
    "designation": "SAL2", 
    "addresses": [ 
    { 
     "city": "Delhi", 
     "country": "India" 
    }, 
    { 
     "city": "Noida", 
     "country": "India" 
    } 
    ] 
} 

이 경우 주소 테이블에는 Noida : India 및 Delhi : India에 대해 각각 4 개의 항목이 포함되어 있습니다.

Noida : India는 1, Delhi : India는 1 인 각 주소 데이터에 대해 1 개의 항목 만 가져 오는 가장 좋은 방법은 무엇인지 이해하고 싶습니다.

+0

요청이 두 번 전송되는지 확인하십시오. –

+0

아니요, 2 명의 다른 직원을 위해 두 번 보냅니다. 그러나 주소 테이블에 해당 주소가 이미있는 경우 주소 테이블에 새 행을 만드는 대신 매핑해야합니다. –

+0

그러면 국가와 도시가 포함 된 복합 키를 만들어야합니다. 합성 키 살펴보기 –

답변

0

위치 항목을 저장하는 별도의 테이블을 만듭니다. 이 테이블의 키를 "국가"와 "도시"의 복합 키로 지정하십시오. 그런 다음 "사용자"에 대한 외래 키 열과 국가 및 도시가 포함 된 테이블이있는 별도의 주소 테이블을 만듭니다.

관련 문제