第一种方法:
比如有一个Student类,想用id和name两者联合作为这个类的主键。那么可以定义一个StudentPK类,其私有变量包括name和id。对于这个外部类,有以下三点要求:①加上注解@Embeddable ②必须要实现序列化,也就是Serializable接口③要重写equals和hashcode函数。
要实现序列化是因为对象需要在内存里存储,为了以后内存满了方便从当前内存转移到另一个内存。重写equals方法是为了和数据库里的唯一性保持一致,内存里也需要能唯一标识对象重写hashcode函数是为了将来将对象存到hash表时方便计算hash值。
总结一下就是@Embeddble @id
第二种方法就是:@EmbeddbleID
第三种方法就是:@id @id @idClass
为什么联合主键一定要是一个类呢?
为了方便比如在做map之类的操作时,value一般书student对象。
同样因为是面向对象key也需要是一个对象,这样就体现出了StudentPK类的好处,可以直接作为主键对象。