2013-02-28 3 views
0

는 다음 매핑 예상하지만 문제는 내가 가지고있는 TimeseriesChart라는 다른 클래스와 같은 정확한 매핑을 가지고있다으로이 작동JDO 공유 조인 테이블 외국 키

Class PieChart{ 
    @Persistent(defaultFetchGroup = "true", table = "chart_metrics_rel") 
     @Join(column = "chart_fk") 
     @Order(column = "order") 
     @Element(dependent = "true", column = "chart_metric_fk") 
     @Extensions({ @Extension(vendorName = "datanucleus", key = "relation-discriminator-column", value = "chart_type"), 
       @Extension(vendorName = "datanucleus", key = "relation-discriminator-pk", value = "true"), 
       @Extension(vendorName = "datanucleus", key = "relation-discriminator-value", value = "pie") }) 
     private List<ChartMetric> metrics; 
} 

가정하십시오 유효하지 않습니다 다른 id 님의 전체 테이블. 따라서 위에 표시된 매핑의 chart_fk 열이 PieChart을 가리킬 수도 있고 다른 시간이 TimeseriesChart을 가리킬 수도 있습니다. 따라서 공유 결합 테이블은 pie_charts (즉, 현재 클래스 인 PieChart)을 가리키고 (예 : TimeseriesChart)을 가리키면 chart_fk 열에 2 개의 외래 키로 생성됩니다.

chart_fk 값이 에있는 경우가 아니면 파이 테이블과 timeseries 테이블을 제외하고 조인 테이블에 요소를 추가 할 수 없습니다!

@Join에 대한 문서를 확인하고 generateForeignKey 주석 특성을 사용했지만 작동하지 않습니다. 속성의 설명이다

는 :

generateForeignKey (String) ORM:Whether to generate a FK constraint on the join table (when not specifying the name) 

왜 아직 생성 된 속성은 외국 키와 같은 효과가 없습니다합니까?

어떤 이름이 when not specifying the name입니까? 조인 테이블이나 FK?

답변

1

해당 공급 업체 확장은 동일한 유형의 관계 (예 : DN 문서가 보여주는 것과 동일)에서 조인 테이블을 공유하는 데 분명히 적용되므로 사용자가 의도하지 않은 곳에서 적용하려고하므로 사용자 오류가 발생합니다.

두 개의 List<Chart> 필드가 있고 하나의 하위 클래스 (PieChart)와 다른 하위 클래스 (TimeseriesChart)가있는 경우 해당 하위 클래스 (잠재적으로 모든 요소 테스트는 동일한 요소 유형의 컬렉션을 기반으로 함)입니다. 그런 정보는 제시하지 않습니다.

+0

감사하지만 두 번째 단락을 이해하지 못해 죄송합니다. 내 컬렉션은 항상 한 가지 유형의'ChartMetric'입니다. 'PieChart'와'TimeseriesChart'는'ChartMetric' 객체의 컬렉션을 담고있는 클래스입니다. 필자는'relation-discriminator-value' 확장에 의해'Pie' 또는'Timeseries' 클래스에 대한 엔트리 (즉, 공유 된 조인 테이블)를 구별합니다. 그리고'generateForeignKey' 애트리뷰트가 예상대로 작동하지 않는 이유는 무엇입니까? –

+0

이 확장은 동일한 요소 유형의 두 개의 콜렉션을 갖는 클래스 A에 대한 것입니다. DN docs에 따라 – DataNucleus

+0

귀하의 회신에 감사드립니다. 이제 내가 잘못한 것을 이해합니다. 하지만'generateForeignKey' 속성이 예상대로 작동하지 않는 이유가 있습니까? –