首页 > 解决方案 > 如何在 JPA 中使用多个外键?

问题描述

我正在启动一个项目以更详细地了解 JPA。

背景:在实习结束时,学生要在教授面前做一份报告和一份关于实习的报告。

我有一个名为“grade_management”的数据库。它必须包含一个“学生”、“演示”、“报告”、“教授”和一个“标记”(有几个评级标准,如表达、PowerPoint 质量......)表。但现在它是空的,因为我想通过 JPA 实现它。

我有一个“演讲”课。这算什么:

@Entity
public class Presentation implements Serializable {
@Id
@GeneratedValue (strategy=GenerationType.AUTO)
private int presentation_id;
private Date date;
private mark_id;
private int professor_id;

public Soutenance() {}

public Soutenance(Date date) {
    this.date = date;
}
}

但是 Presentation 表包含 2 个外键:professor_id 和 mark_id。我的问题是:我怎样才能表明它们都是外键?

很抱歉,如果我不清楚,请不要犹豫提问。

亲切地

标签: jpaforeign-keys

解决方案


从您的解释来看,您似乎有一个名为 Database 的数据库grade_management,并且在该数据库中您有"student", "presentation", "report", "professor" and a "mark"表(即:它们@Entity本身在它们各自的类中定义)

我不确定你是否定义了它们。如果没有,那么您必须先定义它们,然后使用下面提到的重构代码。

因此,您将拥有多对一的关系映射。您可以使用注释来注释属于不同表的外键@ManyToOne以指示关系类型,并使用@JoinColumn注释以指示该实体具有引用表的外键。

您可以重新定义您的 Presentation 类显示如下:

@Entity
@Table(name = "Presentation")
public class Presentation implements Serializable {
    @Id
    @Column(name="presentation_id")
    @GeneratedValue (strategy=GenerationType.AUTO)
    private int presentation_id;
    private Date date;

    @ManyToOne
    @JoinColumn(name = "mark_id")   
    private Mark mark_id;

    @ManyToOne
    @JoinColumn(name = "professor_id")  
    private Professor professor_id;

    public Soutenance() {}

    public Soutenance(Date date) {
        this.date = date;
    }
    //getter and setter 
}

此外,如果您需要自己阅读更多信息,您可以随时查看此Hibernate 文档,该文档解释了您需要了解的所有内容。


推荐阅读