Hibernate annotation多对多中间表设为新类后id无法成为主键的解决方案

问题背景:

众所周知,在hibernate annotation 多对多映射中,若中间表有其他字段,例如学生(T_Student)和课程(T_Course)之间的多对多关系,中间表Score(分数),学生表和课程表是多对多关系,另外为他们的关系添加额外的字段---分数。

 

问题描述:

在马士兵老师hibernate的视频中,hibernateSchemaExport自动生成的表示以studentteacher表的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;

       }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值