【问题标题】:JPA: Give a name to a Foreign Key on DB?JPA:为数据库上的外键命名?
【发布时间】:2011-09-30 07:55:49
【问题描述】:

我有一个简单的问题。如何为 @ManyToOne 注释产生的外键关系命名?

【问题讨论】:

  • 可能问题没有说清楚?

标签: annotations jpa-2.0


【解决方案1】:

使用 JPA 2.1,您只需使用 foreignKey annotation 即可:

import javax.persistence.ForeignKey;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@ManyToOne
@JoinColumn(name = "company_id", nullable = false, foreignKey = @ForeignKey(name="FK_COMPANY__ROUTE"))
private Company company;

不要与deprecated hibernate equivalent混淆

【讨论】:

  • 这是我一直在寻找的答案,非常感谢,我无法让它在多对多关系中发挥作用,但在多对一中它就像一个魅力。
  • 另外:@JoinColumns(foreignKey = @ForeignKey(name = "FK_NAME"), value = { @JoinColumn(name = "COL1"), @JoinColumn(name = "COL2") }) 用于引用复合键的 FK。
【解决方案2】:

从 JPA 2.1 开始,可以通过 @ForeignKey 注释定义外键。

不幸的是,如果您只需要更改名称,它并不是很有用。如果您指定 FK 的自定义名称,您还必须指定 FK 的 SQL 定义。这至少是它在 EclipseLink 2.5.0 中的工作方式。

【讨论】:

    【解决方案3】:

    如果您有兴趣命名外键中使用的列,可以使用@JoinColumn 注释和@ManyToOne 注释指定用于创建外键的列的名称。 JPA 提供者使用@JoinColumn 注释的name 属性的值将表中的列名映射到实体的属性。

    但是,无法配置自己创建的外键约束的名称。在撰写本文时,无法在 OR 映射文件中使用 JPA 注释或配置参数指定外键约束的名称。如果您需要更改外键约束的名称,那么您必须自己创建 DDL 语句,而不是依赖 JPA 提供者来执行此操作。

    【讨论】:

    • 虽然可能存在特定于实现的解决方案,例如 Hibernate 有 @ForeignKey 注释。
    • 检查@borjab 答案,现在有替代方案。
    【解决方案4】:

    我认为@ForeignKey 不适用于@JoinTables,或者我不知道如何设置自定义名称,我已经在@JoinTable->foreignKey 和@JoinColumn->foreignKey 上尝试过

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多