par*_*hah 5 java spring hibernate jpa spring-boot
我的代码如下。我正在使用带有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。
提前致谢。
小智 5
对于连接表,您应该这样指定它
@ManyToMany
@JoinTable(name = "course_program_table",
joinColumns = @JoinColumn(name = "course_id", ...)
foreignKey = @ForeignKey(name = "fk_program_id"),
inverseJoinColumns = @JoinColumn(name = "program_id", ...)
inverseForeignKey = @ForeignKey(name = "fk_course_id"))
private List programs;
Run Code Online (Sandbox Code Playgroud)
这就是我使用我使用的 JPA 提供程序(不是 Hibernate)执行此操作的方式,这就是为什么具有@JoinTable“foreignKey”/“inverseForeignKey”属性(FK 在连接表上/由连接表拥有)。
如果这不起作用,那么您需要考虑在您选择的 JPA 提供商上提出错误。
@ManyToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER)
@JoinTable(name = "tten_courseservice_course_program_table", joinColumns = @JoinColumn(name = "course_id", referencedColumnName = "course_id"), inverseJoinColumns = @JoinColumn(name = "program_id", referencedColumnName = "program_id"))
@ForeignKey(name="fk_tten_courseservice_course_table_course_id",inverseName="fk_tten_courseservice_program_table_program_id")
private List<ProgramEntity> programs;``
Run Code Online (Sandbox Code Playgroud)
我已经尝试过了,现在我可以正确生成外键名称。
希望它能帮助其他人。
| 归档时间: |
|
| 查看次数: |
2568 次 |
| 最近记录: |