请假设以下映射
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的?
答案 0 :(得分:1)
由于该供应商扩展明确适用于在相同类型的关系之间共享连接表(根据DN文档显示的内容),因此您尝试将其应用于不适合的地方,因此用户错误。 / p>
如果你有两个List<Chart>
字段,一个有一个子类(PieChart),另一个有不同的子类(TimeseriesChart),那么它可能适用于那里(我们所有的测试都是基于相同元素的集合)类型),但您没有提供此类信息。