使用==来比较两个对象的记录是否代表数据库中的同一条记录是不可行的。如果您要有必要比较通过查询后两个对象的内容是否相同,必须重写 equals()与hashCode()。
重写hashcode:
//User对象识别
public void testUserObjectIdentify(){
Configuration cfg =null;
SessionFactory sf=null;
Session session=null;
Transaction ts=null;
User u1=null,u2=null;
try {
sf=HibernateUtil.getSessionFactory();//SessionFactory单态模式
session=sf.getCurrentSession();//保证每个读写线程有唯一的session实例
ts=session.beginTransaction();
u1 =session.get(User.class,5);
// u2 =session.get(User.class,5);
// System.out.println(u1==u2);//同一个session,引用相同
// System.out.println(u1.equals(u2));
ts.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(ts !=null) {
ts.rollback();
}
}finally {
//session.close();
//sf.close();
}
try {
sf=HibernateUtil.getSessionFactory();//SessionFactory单态模式
session=sf.getCurrentSession();//保证每个读写线程有唯一的session实例
ts=session.beginTransaction();
u2 =session.get(User.class,5);
ts.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(ts !=null) {
ts.rollback();
}
}finally {
//session.close();
//sf.close();
}
try {
System.out.println(u1==u2);//同一个session,引用相同
System.out.println(u1.equals(u2));//默认比较的是引用
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public int hashCode() {
int result;
result =getName().hashCode();
result =29*result + getBirthday().hashCode();
result =29*result + getAge();
return result; }
重写equals方法后(在User.java中):
public boolean equals(Object obj) {
if(this == obj)
return true;
if(obj == null)
return false;
if(!(obj instanceof User))
return false;
User other = (User)obj;
if(id != other.id)
return false;
if(age != other.age)
return false;
if(!name.equals(other.name))
return false;
if(gender!=null && other.gender!=null) {
if(!gender.equals(other.gender))
return false;
}
if(!birthday.equals(other.birthday))
return false;
return true;
}
User对象识别