我有两个表,在我的Spring代码中是学生和课程。我想创建一个关系表,“获取课程”。我只有学生ID和课程ID。我可以在我的java代码中创建一个具有两个主键的表,但我不能将它们声明为外键。
我尝试了这个解决方案,将两个外键作为主键,但没有成功,我认为其中缺少了一些部分。因此,我尝试了基于此解决方案的方法:
(学生实体有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))
没有外键信息。
我希望它是create table take\u course(cid int8 not null,sid int8 not null,primary key(cid,sid),forign key sid references student(id),foreigr key cid references course(id))
有人能看出我哪里做错了吗?
我试着回答你的问题。
TakeCourse(Java中的类以大写字母开头)是课程和学生之间的关系。
因此,您的实体应如下所示:
@Entity
@Table(name="takeCourse")
public class TakeCourse implements Serializable {
@EmbeddedId
private CompositeKey id;
@MapsId
@ManyToOne
@JoinColumn(name = "sid")
private Student student;
@MapsId
@ManyToOne
@JoinColumn(name = "cid")
private Course course;
// getters and setters
}
请在此处查找有关MapsId的文档:
https://docs.oracle.com/javaee/7/api/javax/persistence/MapsId.html
https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#identifiers-derived
在实体框架中,我想使用两个外键作为另一个实体类型的主键。 但是,这会给我一个缺少键的错误。 我知道我可以定义另外两个属性来保存引用实体类型的主键。Visual Studio是否不够聪明,无法自行使用它们的主键?
如何使用hibernate注释实现下表? 当前代码为:(为简洁起见,已删除) 使用者 社交网络 SocialProfile公司 显然我的代码现在不能正常工作。有人能解释一下吗?
但是当我运行应用程序时,我会得到以下异常:
我正在使用实体框架管理我的sql server ce数据库。我希望我的表的主键由其他表的几个外键组成。我希望这样的事情能奏效: 但它会导致以下数据库迁移错误: 票据打印机。Bill::EntityType“Bill”没有定义键。定义此EntityType的键。Bills:EntityType:EntitySet“Bills”基于未定义键的类型“Bill”。 如何使表具有由这三个外键组成的主键?
这听起来很无聊,但我想知道我是否可以让主键在Laravel中作为外键工作,我对Laravel是新手。 因此,我有两个迁移“User”和“Student”,如下所示:User: 学生: 所以,我所想要的是,学生(uniqueId)中的主键也可以用作引用User表中的uniqueId列的外键。 提前谢谢。