0

次のマッピングを想定してください

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;
}

TimeseriesChartこれは期待どおりに機能しますが、問題は、別のテーブル全体が異なると呼ばれる別のクラスとまったく同じマッピングを持っていることidです。したがって、chart_fk上記のマッピングの列は、 を指す場合もあれば、 を指す場合もありPieChartますTimeseriesChart。したがって、共有結合テーブルは、chart_fk列に2 つの外部キーを使用して作成されます。1 つはpie_charts(PieChart現在のクラス) を指し、もう 1 つはtimeseries_chart(つまりTimeseriesChart) を指します。

値が円グラフと時系列テーブルの両方chart_fkに存在しない限り、結合テーブルに要素を追加することはできません!

ドキュメントを確認し、generateForeignKey注釈属性を使用しまし@Joinたが、機能していません。

それが属性の説明です:

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

では、外部キーがまだ生成されているため、属性が効果がないのはなぜですか?

そして、何の名前をwhen not specifying the name指していますか?結合テーブルまたは FK の ?

4

1 に答える 1

1

そのベンダー拡張は、同じタイプのリレーション間の結合テーブルの共有に明確に適用されるため (DN ドキュメントが示すように)、意図しない場所に適用しようとしているため、ユーザー エラーです。

2 つのList<Chart>フィールドがあり、一方に 1 つのサブクラス (PieChart) があり、もう一方に別のサブクラス (TimeseriesChart) がある場合、そこに適用できる可能性があります (すべてのテストは同じ要素タイプのコレクションに基づいています)。情報。

于 2013-03-01T10:34:06.097 に答える