Java对象识别(Hibernate应用)
本文在http://sarin.iteye.com/blog/603684和http://sarin.iteye.com/blog/644678的基础之上继续研究,探究Java对象识别时的应用,并通过Hibernate来说明。
Java语言中判断对象是否相等有两种方式,一种是使用“==”来比较,一种是使用equals()方法来比较,前者是比较两个对象的引用地址是否相同,即两个引用地址是否指向同一个对象,而后者是比较对象的内容是否一致。
equals()方法是Object类中定义的方法,所有Java类都可以直接或间接继承这个方法,通过方法覆盖就可以实现自己的equals()方法,而这个方法的原始定义如下:
持久化类的其他属性参照toString()方法里的参数即可。我们使用Eclipse为我们自动生成了equals()方法,比较内容只是属性标识符(主键),因为持久化类对应数据库表中的记录,而记录由主键唯一标识,所以使用标识符属性来作为equals()方法比较的内容就最合适了。
在Hibernate中判断两个持久化对象是否相等,需要全面考虑,因为这里面的判断因素比较多。首先在相同的Session对象中,只要标识符属性值相同,那么两个持久化对象就相等,看下面的代码:System.out.println(user1.equals(user2));
得到的结果也是正确的,equals()方法的实现就是前面持久化类中的,而这个方法是可以借助Eclipse完成的,只需勾选需要比较的属性即可。
1 楼 chian_xxp 2010-09-16 多谢,似乎可以结合非主键、唯一性约束判断。谢谢。 2 楼 sarin 2010-09-16 chian_xxp 写道多谢,似乎可以结合非主键、唯一性约束判断。谢谢。
主键约束要求唯一而且非空,唯一性约束可以为空。非主键如何唯一确定一条记录呢?