在我的春季代码中,我有两个表,分别是学生表和课程表。我想创建一个关系表“ takeCourse”。我将只有学生ID和课程ID。我可以在Java代码中创建带有两个主键的表,但是不能将它们声明为外键。
我尝试了此解决方案Two foreign keys as primary key,但没有解决,我认为其中有些缺失的部分。因此,我根据以下解决方案进行了尝试:
(学生实体具有ID,名称,姓氏) (课程实体具有ID,课程名称)
// This is embedded id:
@Embeddable
public class CompositeKey implements Serializable {
public long getSid() {
return sid;
}
public void setSid(long sid) {
this.sid = sid;
}
public long getCid() {
return cid;
}
public void setCid(long cid) {
this.cid = cid;
}
@Column(name="sid")
private long sid;
@Column(name="cid")
private long cid;
}
//This is takeCourse entity code
@Entity
@Table(name="takeCourse")
public class takeCourse implements Serializable {
@EmbeddedId CompositeKey id;
@ManyToMany
@JoinColumn(name = "sid")
public Student getStudent(StudentRepository repo){
return repo.findById(id.getSid());
}
@ManyToMany
@JoinColumn(name = "cid")
public Course getStudent(CourseRepository repo){
return repo.findById(id.getCid());
}
}
我希望创建带有两个fk作为pk的表。但结果是:
创建表take_course(cid int8不为null,sid int8不为null, 主键(cid,sid))
没有外键信息。
我希望它成为 创建表take_course(cid int8不为null, sid int8不为null, 主键(cid,sid), 外键sid引用学生(id), foreigr关键CID参考课程(id))
有人可以看到我在哪里出问题了吗?
答案 0 :(得分:1)
我试图回答你的问题。
TakeCourse(Java中的类以大写字母开头)是Course与Student之间的关系。
所以您的实体应如下所示:
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.min.js"></script>
<canvas id="NbTicketsChart" width="50" height="50"></canvas>
<script>
var NbCanvas = document.getElementById("NbTicketsChart");
Chart.defaults.global.defaultFontFamily = "Lato";
Chart.defaults.global.defaultFontSize = 18;
var densityData = {
label: 'Nombre de tickets sur la semaine',
data: [20, 25, 30, 25, 30, 35, 40],
backgroundColor: '#336ca6'
};
var barChart = new Chart(NbCanvas.getContext('2d'), {
type: 'bar',
data: {
labels: ["J-1", "J-2", "J-3", "J-4", "J-5", "J-6", "J-7"],
datasets: [densityData]
}});
barChart.options.scales.yAxes[0] = {ticks: {min: 0, max: 100, stepValue: 20}}
</script>
请在此处找到有关MapsId的文档:
https://docs.oracle.com/javaee/7/api/javax/persistence/MapsId.html