问题背景:
众所周知,在hibernate annotation 多对多映射中,若中间表有其他字段,例如学生(T_Student)和课程(T_Course)之间的多对多关系,中间表Score(分数),学生表和课程表是多对多关系,另外为他们的关系添加额外的字段---分数。
问题描述:
在马士兵老师hibernate的视频中,hibernateSchemaExport自动生成的表示以student和teacher表的id为主键的,score表的自动生成id无效,老师通过手动建表,然后插入数据。
解决方案:
只需要把在score类中的@id放在@ ManyToOne之前就可解决,可能是当hibernate生成id时是根据score类的注解从上到下依次解析,到@id后就会生成主键,然后再到@ManyToOne,就不会再生成新的id了。
@Entity
public class Score {
privateint id;
privateint score;
privateUser user;
privateTeam team;
@Id
@GeneratedValue
publicint getId() {
returnid;
}
publicvoid setId(int id) {
this.id= id;
}
publicint getScore() {
returnscore;
}
publicvoid setScore(int score) {
this.score= score;
}
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="user_id")
publicUser getUser() {
returnuser;
}
publicvoid setUser(User user) {
this.user= user;
}
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="team_id")
publicTeam getTeam() {
returnteam;
}
publicvoid setTeam(Team team) {
this.team= team;
}
}