2012-08-13 2 views
1

하자 내가 아래 기관 Country 클래스가 미리 설정 한 마스터 테이블에 매핑 수정할 수 없습니다제어 자식 개체는

@Entity 
public class Item{ 

    private Country origin; 

    @ManyToOne(optional=true) 
    @JoinColumn(name="origin") 
    public Country getOrigin() { 
     return this.origin; 
    } 

} 

@Entity 
public class Country{ 

    private String code; 
    private String desc; 

    @Id 
    public String getCode() { 
     return this.code; 
    } 

    @Column 
    public String getDesc() { 
     return this.desc; 
    } 

} 

을 말한다. 사용자는 Item을 새로 만들 때 origincode을 설정할 수 있습니다. 제공된 code이 이미 마스터 테이블의 항목인지 어떻게 확인할 수 있습니까?

단순히 persist()의 새로운 Item이 존재하지 않고 자식이 지속되지 않는 code 인 경우 이보고됩니다. 존재하지 않는 마스터 데이터로 처리하기 위해이 예외를 시도하면됩니까? 아니면 더 좋은 대안이 있습니까?

실제로이 Item 개체에는 많은 하위 엔터티가 있으므로 마스터 데이터를 하나씩 명시 적으로 조회하는 것은 좋지 않습니다. 그리고 나는 이것이 좋은 해결책이 아니라고 생각합니다.

답변

1

Country이 이미 있는지 여부를 확인하려면 모든 해결 방법을 마스터 테이블로 전환해야합니다. 이 호출을 명시 적으로하는지, 아니면 프레임 워크 (Hibernate)에게 이것을 요구하는지에 대한 질문입니다.

Item을 생성 할 소스/입력이 신뢰할 수 없다는 것을 알고있는 경우 명시 적으로 Country 데이터를 테이블에 대해 유효성을 검사합니다. GUI를 엄격하게 제어 할 수 있다면 존재하는 유효한 옵션 만 사용자에게 제공해야하기 때문에이 오류가 발생하지 않을 수도 있습니다. 또한 신뢰할 수없는 데이터로 인해 지속되기 전에 확인해야한다는 것을 알고 있다면 명시 적으로 유닛 테스트를 작성하여이 명시적인 검사를 포함 할 수 있습니다.

Hibernate는 쿼리를 Country 테이블에 캐시하므로, 애플리케이션의 성능에 영향을 미치지는 않을 것이라고 생각한다.