为了账号安全,请及时绑定邮箱和手机立即绑定

双主键为什么不能设置成功呢?

我想设置两个主键,一个是int类型的,一个是String类型的.但是我把@GenericGenerator这个注解加在String类型的属性上了也设置了长度,但是DDl显示依然是自动增长.而且我int类型的自动增长没有生效.然后数据库变没有创建成功.大家能帮我看看是什么原因吗?谢谢了,

http://img1.sycdn.imooc.com//595a3fe60001401e08220391.jpg

http://img1.sycdn.imooc.com//595a3fe700010b3906830252.jpg


正在回答

1 回答

你要设置这两个主键的话,需要把这两个主键单独放到一个主键类中啊,亲,例如下面这样:

/*
 * 学生主键类
 */
@Embeddable
public class StudentPk implements Serializable{
    
    /**
     * 生成一个版本序列号
     */
    private static final long serialVersionUID = 1L;
    
    //身份证Id号码
    @Column(length=18)
    private String personId; 
    
    //学号
    @Column(length=8)
    private String studentId;
    
    public StudentPk() {
        super();
    }

    public StudentPk(String personId, String studentId) {
        super();
        this.personId = personId;
        this.studentId = studentId;
    }

    public String getPersonId() {
        return personId;
    }

    public void setPersonId(String personId) {
        this.personId = personId;
    }

    public String getStudentId() {
        return studentId;
    }

    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }

    @Override
    public int hashCode() {
        // TODO Auto-generated method stub
        return super.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
        return super.equals(obj);
    }
    

}

最后在实体类中写,如下:

@EmbeddedId
    private StudentPk pk;
 public StudentPk getStudentPk() {
        return pk;
    }

    public void setStudentPk(StudentPk pk) {
        this.pk = pk;
    }

你再去调试调试,祝你成功,学有所成,步步高升,开开心心,啦啦啦啦啦~~

0 回复 有任何疑惑可以回复我~
#1

qq_卑微幻想家_0 提问者

谢谢,谢谢!我再去试试,看来我学还不够好。谢谢,你的解答?
2017-08-03 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Hibernate注解
  • 参与学习       37175    人
  • 解答问题       93    个

轻松学习Hibernate常用注解,学完本课能够灵活应用

进入课程

双主键为什么不能设置成功呢?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号