hibernate复合主键中为什么要复写equals和hashcode方法?
这不是必须的吧,只有你要通过复合主键比较对象的时候才用重写equals和hashcode方法吧。

解决方案 »

  1.   

    通常使用equals比较两个对象是因为比较的是两个对象的内存地址,而这个地址是通过hashcode方法来获的。通常情况下,我们的hashcode都是访问super class的hashcode,比如Object类。
    如果使用了复合主键,在hibernate中,要比较两个对象则是通过复合主键来比较,如果不重写那个equals和hashcode方法,则无法完成某些操作。
      

  2.   

    原因是 数据库记录的差别在于业务键,也就是table的主键来区分2条记录的不同,而不是仅仅看其内存地址是否相同。