jpa - 如何在 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。我的问题是:我怎样才能表明它们都是外键?
很抱歉,如果我不清楚,请不要犹豫提问。
亲切地
解决方案
从您的解释来看,您似乎有一个名为 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 文档,该文档解释了您需要了解的所有内容。
推荐阅读
- docker - 从 swarm 中删除已终止的实例(管理器),并恢复 swarm 状态
- reactjs - 使用 useEffect 反应 init carousel jQuery lib
- flutter - Flutter:如何增加文本中标签“\ t”的缩进宽度
- python-3.x - 在 Jupyter 笔记本中导入 Pytorch 时遇到问题
- javascript - 如何仅使用“普通” html、CSS 和 Javascript 使按钮出现在滚动条上
- python - 包含混合数据的列
- typescript - 为什么 lib.es5.d.ts 有 Promise?
- gnuplot - 如何在gnuplot中用线条绘制误差线?
- jquery - 如何将 Chrome 扩展本地化为网上应用店中不可用的语言?
- amazon-web-services - AWS CDK - StepFunction - 在传递到下一步之前修改输入