【问题标题】:How to customize the foreign key names used in DataNucleus JDO inheritance hierarchies?如何自定义 DataNucleus JDO 继承层次结构中使用的外键名称?
【发布时间】:2015-08-06 15:04:54
【问题描述】:

DataNucleus 的JDO Inheritance 指南提到,在InheritanceStrategy.NEW_TABLE 类关系中,将在超类和子类表之间创建一个外键。运行 DataNucleus 模式生成器,我确实看到正在生成这样的外键。不过,我无法发现如何自定义这些外键的名称。

例如:

@PersistenceCapable(table = "login_identities")
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
public abstract class AbstractLoginIdentity { ... }

@PersistenceCapable(table = "email_login_identities")
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
public class EmailLoginIdentity extends AbstractLoginIdentity { ... }

鉴于这些类,DataNucleus 将生成如下外键(对于 PostgreSQL):

-- Constraints for table "email_login_identities" for class(es) [com.trickle.api.accounts.EmailLoginIdentity]
ALTER TABLE "email_login_identities" ADD CONSTRAINT "email_login_identities_FK1" FOREIGN KEY ("id") REFERENCES "login_identities" ("id") ;

我找不到任何更改“email_login_identities_FK1”约束名称的方法。给子类添加@ForeignKey注解只是增加了一个新的外键。

这个可以定制吗?

【问题讨论】:

    标签: java jdo datanucleus


    【解决方案1】:

    this page 的脚下显示了如何使用 XML 为连接到超类定义外键。

    我在注释中看不到这样做的方法(因为@Inheritance 没有@Join,而@Join 没有@ForeignKey)...但是我永远不想硬编码 ORM 定义 进入 Java 类。我假设您可以通过 Apache JDO 人员在注释中请求这样的工具。

    【讨论】:

    • 非常感谢您的指点!我能够通过附加的 .orm 文件为该类指定 FK 名称,这解决了我的问题。 (我曾经和你有同样的感觉,关于不在注释中指定 ORM 元数据,但后来我决定最好把所有东西都放在一个地方,因为我只需要支持一个 RDBMS 平台。)
    猜你喜欢
    • 2013-11-08
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多