hibernate---id生成策略_联合主键_xml

1:一般能用一个字段做主键的就不要用两个字段,不过不可避免的会遇到要用两个字段做主键,此时要用hibernate,可以使用联合主键。如图:要用id和name做主键

办法:单独设计一个类,起名StudentPK,在该类必须重写equals,hashcode,实现Serializable接口。

此时在Student类中可以删除掉id和name的属性及get/set方法,但是必须加入新的属性,该属性的类型是StudentPK,如:private StudentPK pk;然后生成get/set方法,此时要想存一个Student,首先:new一个StudentPK,然后如图:

此时还不够,还必须在配置文件中告诉你哪个是主键?

 ps:

为什么实现serise接口?因为ser是序列化的,是将该类序列化然后写到硬盘上的。

作为student这个对象,它在数据库表中可能存在着多条记录,这多条记录如果我们把它放到内存里的话就是多个对象,这多个对象,假如现在被放到了内存中都是student,那么你可以想象每个student对象都有一个主键对象(StudentPK),假如要做集群,有多台服务器,这台宕机了,我们可以序列化,还有一种情况,内存满了,我可以使用虚拟内存,就是把我们硬盘上的一部分空间作为内存来使用,在这种情况下,我们就可以把上面那些内容暂时放到要硬盘上去,所以这个时候就需要实现序列化了。

如图:

为什么要重写equals?

保证唯一性。放到内存之后很多student对象,里面都有自己的studentPK,这个时候如何区分?

而且重写时不能乱写。

为什么要重写hashcode?

因为假如说,如果说我们这个对象,它被装在内存的hash表里面,查询时会首先查hashcode,

什么是hash表?

实际上就是一张表格,也可以是数组。hash表在底层很多是数组来实现的。

posted @ 2013-04-09 09:44  歌颂者  阅读(956)  评论(0编辑  收藏  举报