JPA:给DB上的外键命名?

giu*_*ius 7 annotations jpa-2.0

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

bor*_*jab 11

使用JPA 2.1,您可以使用foreignKey注释执行此操作:

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;
Run Code Online (Sandbox Code Playgroud)

不要与已弃用的hibernate等价物混淆


Mar*_*een 5

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

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


Vin*_*lds 3

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

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

  • 尽管可能存在特定于实现的解决方案,例如 Hibernate 有 @ForeignKey 注释。 (3认同)