Hibernate同一性问题
package com.cg.foo; // Generated 2012-7-19 11:40:57 by Hibernate Tools 3.4.0.CR1 import java.util.Date; import java.util.HashSet; import java.util.Set; /** * TUser generated by hbm2java */ public class TUser implements java.io.Serializable { private long id; private String name; private String nickname; private Date birthday; private Set<TCard> TCards = new HashSet<TCard>(0); public TUser() { } public TUser(long id) { this.id = id; } public TUser(long id, String name, String nickname, Date birthday, Set<TCard> TCards) { this.id = id; this.name = name; this.nickname = nickname; this.birthday = birthday; this.TCards = TCards; } public long getId() { return this.id; } public void setId(long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getNickname() { return this.nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public Date getBirthday() { return this.birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Set<TCard> getTCards() { return this.TCards; } public void setTCards(Set<TCard> TCards) { this.TCards = TCards; } @Override public boolean equals(Object other) { if(this==other)return true; //if(id==null)return false; if(!(other instanceof TUser))return false; final TUser that = (TUser)other; return this.id == that.id; } @Override public int hashCode() { // return id==null? System.identityHashCode(this):this.id.hashCode(); return (int)id; } } package com.cg.test; import java.util.HashSet; import java.util.Set; import org.hibernate.Session; import org.hibernate.tutorial.util.HibernateUtil; import org.junit.Test; import com.cg.foo.TUser; public class TestObjIdentityEqual { @Test public void test() { Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); TUser a =(TUser) session.get(TUser.class , 7L); TUser b =(TUser) session.get(TUser.class , 7L); System.out.println("测试1个session的get对象同一性:"); System.out.println(a == b); //true session.getTransaction().commit(); session.close(); Session session2 = HibernateUtil.getSessionFactory().openSession(); session2.beginTransaction(); TUser c = (TUser) session2.get(TUser.class, 7L); System.out.println("测试两个session的get对象同一性:"); System.out.println(a == c); //false: detached & persisted session2.getTransaction().commit(); session2.close(); Set<TUser> setAll =new HashSet(); setAll.add(a); setAll.add(b); setAll.add(c); System.out.println(setAll.size()); //size:2 } }