重写equals方法

使用==来比较两个对象的记录是否代表数据库中的同一条记录是不可行的。如果您要有必要比较通过查询后两个对象的内容是否相同,必须重写 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对象识别
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值