【发布时间】:2011-09-30 07:55:49
【问题描述】:
我有一个简单的问题。如何为 @ManyToOne 注释产生的外键关系命名?
【问题讨论】:
-
可能问题没有说清楚?
标签: annotations jpa-2.0
我有一个简单的问题。如何为 @ManyToOne 注释产生的外键关系命名?
【问题讨论】:
标签: annotations jpa-2.0
使用 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;
【讨论】:
@JoinColumns(foreignKey = @ForeignKey(name = "FK_NAME"), value = { @JoinColumn(name = "COL1"), @JoinColumn(name = "COL2") }) 用于引用复合键的 FK。
从 JPA 2.1 开始,可以通过 @ForeignKey 注释定义外键。
不幸的是,如果您只需要更改名称,它并不是很有用。如果您指定 FK 的自定义名称,您还必须指定 FK 的 SQL 定义。这至少是它在 EclipseLink 2.5.0 中的工作方式。
【讨论】:
如果您有兴趣命名外键中使用的列,可以使用@JoinColumn 注释和@ManyToOne 注释指定用于创建外键的列的名称。 JPA 提供者使用@JoinColumn 注释的name 属性的值将表中的列名映射到实体的属性。
但是,无法配置自己创建的外键约束的名称。在撰写本文时,无法在 OR 映射文件中使用 JPA 注释或配置参数指定外键约束的名称。如果您需要更改外键约束的名称,那么您必须自己创建 DDL 语句,而不是依赖 JPA 提供者来执行此操作。
【讨论】:
我认为@ForeignKey 不适用于@JoinTables,或者我不知道如何设置自定义名称,我已经在@JoinTable->foreignKey 和@JoinColumn->foreignKey 上尝试过
【讨论】: