重写equals方法
在hibernate中,如果是同一个session中根据查询得到的相同记录会拥有相同的java识别。
使用==比较两个对象的记录是否代表数据库中桐一个记录不可信必要时候比较内容是否相同需要重写equals()和hashCode()。
Object类的equals()方法的判断依据是引用地址,而String类的equals()方法则是在此基础上加了另一个IF判断,判断两个字符串里的字符是否对应相等。即如果两个字符串变量的引用地址不同,但是是同一个字符串的话,这两个字符串被视为相等。
因此通过重写equals()方法可以按照自己的意愿指定判定两个对象是否相等的依据。
实体类宗加入如下代码:
public boolean equals(Object obj) { if(this==obj){ return true; } if(!(obj instanceof User)){ return false; } final User user = (User) obj; if( this.userId == user.userId && this.userName.equals(user.userName) && this.password.equals(user.password) && this.gender == user.gender ){ return true; } return false; } public int hashCode(){ int result = 0; result = this.userName.hashCode() + this.password.hashCode(); result = this.gender.hashCode() + result; return result; }
package com.Entity.Util; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; import com.Entity.User.User; public class TestSessionFactory { Configuration cfg = null; SessionFactory sf = null; Transaction ts = null; Session session = null; @Test public void select(){ try { sf=SessionFactiryUtil.getSessionFactory(); session = sf.getCurrentSession(); ts = session.beginTransaction(); // User user=new User(); User user1=(User)session.get(User.class, 1); User user2=(User)session.get(User.class, 3); User user3=(User)session.get(User.class, 4); User user4=(User)session.get(User.class, 1); System.out.println(user1==user2); System.out.println(user1.equals(user2)); System.out.println(user2==user3); System.out.println(user1.equals(user3)); System.out.println(user1==user4); System.out.println(user1.equals(user4)); ts.commit(); session.close(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package com.Entity.Util; import org.hibernate.HibernateException; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class SessionFactiryUtil { private static Configuration cfg; private static SessionFactory sf; static { try { cfg = new Configuration().configure(); sf = cfg.buildSessionFactory(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static SessionFactory getSessionFactory() { // TODO Auto-generated method stub return sf; } }
参考文章
https://blog.csdn.net/yuripe1995/article/details/49205637点击打开链接