我正在使用JPA类创建数据库.
如果我们有ManyToOne关系,我们可以像这样覆盖ForeignKey名称:
@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "FK_COUNTRY"))
private Country country;
Run Code Online (Sandbox Code Playgroud)
在DB中,我们将得到这样的结果:

好的,那很好.好结果!
但是当我有@ManyToMany时,我将无法设置我自己的FK名称.
我该如何创建呢?我尝试这样的东西,但它不起作用:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "NEW_TABLE", foreignKey = @ForeignKey(name = "FK_TEST"))
Run Code Online (Sandbox Code Playgroud)
或类似的东西:
@JoinTable(
name="NEW_TABLE",
joinColumns=
@JoinColumn(name="ID1", referencedColumnName="ID", foreignKey = @ForeignKey(name = "FK_DEV_ID")),
inverseJoinColumns=ID2", referencedColumnName="ID", foreignKey = @ForeignKey(name = "FK_DEV_ZONE"))
)
Run Code Online (Sandbox Code Playgroud)
或这个:
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(name="NEW_TABLE_2",
joinColumns=
@JoinColumn(name="ID1", referencedColumnName="ID",
foreignKey = @ForeignKey(name = "FK_1")
),
inverseJoinColumns=
@JoinColumn(name="ID2", referencedColumnName="ID",
foreignKey = @ForeignKey(name = "FK_2")
),
foreignKey = @ForeignKey(name = "FK_1"),
inverseForeignKey = …Run Code Online (Sandbox Code Playgroud) 我的代码如下。我正在使用带有jpa和postgresql数据库的spring boot,我需要用户友好的名称作为外键。
@实体
@Table(name =“ course_table”)
公共课程课程扩展了BaseAuditingEntity {
@ManyToMany(级联= CascadeType.REMOVE,提取= FetchType.EAGER)
@JoinTable(name =“ course_program_table”,joinColumns = @JoinColumn(name =“ course_id”,referencedColumnName =“ course_id”,foreignKey = @ForeignKey(name =“ fk_program_id”)),inverseJoinColumns = @JoinColumn(name =“ program_id”, referencedColumnName =“ program_id”,foreignKey = @ForeignKey(name =“ fk_course_id”)))
私人名单计划;
}
我已经使用@ForeignKey批注指定了外键的名称,但是当我看到db时,它显示了随机创建的外键名称。
创建表course_program_table
(
course_id整数NOT NULL,
program_id整数NOT NULL,
约束fk_28c95hl4nqclyvyxuduei5nbf外键(program_id)
参考public.program_table(program_id)匹配简单
无需更新时
删除任何操作后,
约束fk_5sainywquv8yyu24pjk3jptn7外键(course_id)
参考public.course_table(course_id)匹配简单
无需更新时
不删除任何动作
)
我需要注释中提到的外键,例如fk_program_id和fk_course_id。
提前致谢。
休眠如何生成外键约束名称?
如果我没有定义名称,休眠将生成类似这样的内容
CONSTRAINT fk_2ocepcfwpr1v18dg1ieoe6bau
Run Code Online (Sandbox Code Playgroud)
这个名字是怎么产生的?也许来自MD5字段名称的哈希值或类似的东西?我需要知道所有实例上的名称是否相等。