代码如下。我使用的是Spring的 Boot 与jpa和postgresql数据库我需要用户友好的名字作为外键。
@Entity
@Table(name="course_table")
public class Course extends BaseAuditingEntity {
@ManyToMany(cascade = CascadeType.REMOVE, fetch = 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")))
private List programs;
}
我已经使用@ForeignKey注解给出了外键的名称,但是当我看到db时,它显示的是随机创建的外键名称。
CREATE TABLE course_program_table
(
course_id integer NOT NULL,
program_id integer NOT NULL,
CONSTRAINT **fk_28c95hl4nqclyvyxuduei5nbf** FOREIGN KEY (program_id)
REFERENCES public.program_table (program_id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION,
CONSTRAINT **fk_5sainywquv8yyu24pjk3jptn7** FOREIGN KEY (course_id)
REFERENCES public.course_table (course_id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
我需要像fk_program_id和fk_course_id注解中提到的外键。
先谢了。
3条答案
按热度按时间ffscu2ro1#
对于连接表,您应该这样指定它
这就是我使用JPA提供程序(而不是Hibernate)的方式,这就是为什么
@JoinTable
具有“foreignKey”/“inverseForeignKey”属性(FK在连接表上/由连接表拥有)。如果这不起作用,那么您需要考虑在您选择的JPA提供程序上提出一个错误。
pbwdgjma2#
我已经尝试过了,现在我可以正确地生成外键名称了。
希望能对其他人有所帮助。
eqzww0vc3#
所有其他的答案对我都有效,但是我必须添加额外的唯一约束,否则我可以看到在liquibase变更集中生成的额外的唯一键。
以下内容涵盖了所有的键。