当前位置: 首页 > 知识库问答 >
问题:

如何使用join列指定外键?

杜绍元
2023-03-14

我的代码如下。我正在使用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注释给出了foreignkey的名称,但当我看到db时,它显示的是随机创建的foreignkey名称。

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那样的外键。

提前道谢。

共有2个答案

魏书
2023-03-14

对于联接表,您应该这样指定它

@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”属性(FK在联接表上/由联接表拥有)。

如果这不起作用,那么您需要考虑在所选的JPA提供程序上产生一个bug。

孙永思
2023-03-14
@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;``

我已经试过了,现在我可以正确地生成外键名称了。

希望它能帮助其他人。

 类似资料:
  • 我刚用了Fromsqlraw。在Microsoft tutorial enter link description here中,使用FromSqlRaw必须选择所有列(请注意,我还没有看到一些好的例子)。但我想要的是在连接几个表时选择一些特定的列。 首先,我连接了两个表,如下所示(RequestMaterial将Request的键作为外键): 错误消息是“底层阅读器没有预期的那么多字段”。 当我尝

  • 现有的PostgreSQL数据库具有以不同“模式”组织的表,以拆分大型数据库(用于在服务器级别扩展和实现微调的安全性)。类似地,声明性_基表描述组织在包中的不同文件中-每个模式一个文件: 元数据和引擎对象作为。例如,图1中的表。py将有(忽略必要的ORM导入,然后需要反向引用)表alpha: 现在在图2中的表中。py,定义了两个表。一个是称为beta的独立表,另一个是alpha和beta之间的一对

  • 问题内容: 目前,我的JDK设置为1.4.2。 要运行Maven 3,我需要1.5及更高版本。 除了更改环境变量之外,是否有任何方法可以指示我的Maven安装使用另一个已安装的JDK ? 问题答案: 那几乎就是这样做的方式。我假设您的意思是您不想更改全局JAVA_HOME。没关系。您只需要为Maven设置一个不同的JAVA_HOME。您可以通过在或(Linux)或(Windows)上创建一个文件,

  • 问题内容: 我感觉好像总是被教导要使用s,并且我经常看到它们与s 混合使用,以在应该在不同页面上执行相同操作的几段代码中完成相同类型的查询。开始: 那就是我正在从事的工作: 我看到很多像: 似乎LEFT也可能是INNER,有没有抓住的机会? 问题答案: 有收获吗?是的-左联接是外联接的一种形式,而内联接是内联接的一种形式。 这是显示差异的示例。我们将从基本数据开始: 在这里,我们将看到内部联接和左

  • 有两个表 表 user id name 1 tom 2 jerry 表 friend id user_id support_id 1 1 1 2 1 2 表 support id name can_fly 1 bird 1 2 dog 0 三个 Model 我想实现如下 sql,意义为 获取 tom 所有会飞的朋友 关系 我这样写,但后边的不会写了,求解。

  • 我正在使用ApachePOI将数据写入Excel文件,我希望第一行为只读,其他行可以随时编辑。但我没有找到有效的解决方法。 下面是我的代码: 看起来这个java代码块应该可以工作,但实际上它不仅会锁定第一行,还会锁定其他行的空单元格。 所以我想知道,有没有一种有效的方法可以使用apachepoi只锁定excel文件的第一行?