JDO共享连接表外键无效

时间:2013-02-28 22:13:10

标签: jdo datanucleus

请假设以下映射

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个外键,一次指向pie_charts(即PieChart,当前类),并指向{{1} }(即timeseries_chart)。

除非{strong>两者饼图和时间序列表中都存在TimeseriesChart值,否则我不允许将元素添加到连接表中。

我检查了文档,并使用chart_fk的{​​{1}}注释属性,但它不起作用。

这是属性的描述:

generateForeignKey

那么为什么属性没有效果,因为仍然生成了外键?

@Join指的是什么名字?连接表或FK的?

1 个答案:

答案 0 :(得分:1)

由于该供应商扩展明确适用于在相同类型的关系之间共享连接表(根据DN文档显示的内容),因此您尝试将其应用于不适合的地方,因此用户错误。 / p>

如果你有两个List<Chart>字段,一个有一个子类(PieChart),另一个有不同的子类(TimeseriesChart),那么它可能适用于那里(我们所有的测试都是基于相同元素的集合)类型),但您没有提供此类信息。