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's 的表。所以chart_fk上面显示的映射中的列有时会指向 ,有时会PieChart指向TimeseriesChart。因此,共享连接表是在chart_fk列上使用 2 个外键创建的,一次指向pie_charts(即PieChart当前类),一次指向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 文档显示的内容),因此您试图将其应用到不打算使用的地方,因此会出现用户错误。

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

于 2013-03-01T10:34:06.097 回答