java - 如何用连接列指定外键?

标签 java spring hibernate spring-boot jpa

我的代码如下。我正在使用带有 jpa 和 postgresql 数据库的 spring boot 我需要用户友好名称作为外键。


    @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。

提前致谢。

最佳答案

对于连接表,这是您应该指定的方式

@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;

这就是我使用 JPA 提供程序(不是 Hibernate)的方式,这就是为什么 @JoinTable 具有“foreignKey”/“inverseForeignKey”属性(FKs on/由连接表拥有)。

如果这不起作用,那么您需要考虑在您选择的 JPA 提供程序上提出错误。

关于java - 如何用连接列指定外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49557014/

相关文章:

java - 如何使用 RecyclerView 创建两列?

java - 无法通过浏览器访问 Controller

java - 有或没有提交到服务器的Spring JSP文件上传

java - 如何用 Tomcat 覆盖 spring 属性参数?

java - 没有 JDBC 类型 : -101 的方言映射

java - @SequenceGenerator allocationSize 'duplicate key error' 问题

java - 使用 Spring 和 Thymeleaf 进行编辑

Spring Data Rest 异常处理 - 返回通用错误响应

java - 生成的查询包含架构和目录名称

java - 使用 cordova 构建时 JAVA_HOME 无效