【发布时间】:2019-11-01 03:48:27
【问题描述】:
我的 spring 代码中有两个表,分别是学生和课程。我想创建一个关系表“takeCourse”。我将只有学生 ID 和课程 ID。我可以在我的 java 代码中创建一个包含两个主键的表,但我不能将它们声明为外键。
我尝试了这个解决方案Two foreign keys as primary key,但没有成功,我认为那里有一些缺失的部分。所以我根据这个解决方案尝试了这个:
(学生实体有 id、name、surname) (课程实体有id, coursename)
// 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 not null,sid int8 not null, 主键(cid,sid))
没有外键信息。
我希望它成为 创建表take_course(cid int8不为空, sid int8 不为空, 主键(cid,sid), 外键 sid 引用学生(id), foreigr 关键 cid 参考课程 (id))
有没有人能看出我哪里出错了?
【问题讨论】:
-
这不是有效的代码。您不能将 repo 传递给 getter。另外,这不是多对多而是多对一的关系。
-
@column 注解下应该写什么代码?