代码1_save: super.getHibernateTemplate().save(user); System.out.println(":"+user.getId()); 输出1: Hibernate: insert into user (userid, userpwd, userques, userans, usermail, integral, grade, sex, realname) values (?, ?, ?, ?, ?, ?, ?, ?, ?) :9 代码2_merge: super.getHibernateTemplate().merge(user); System.out.println(":"+user.getId()); 输出2: Hibernate: insert into user (userid, userpwd, userques, userans, usermail, integral, grade, sex, realname) values (?, ?, ?, ?, ?, ?, ?, ?, ?) :0 代码3_merge: user = (User)super.getHibernateTemplate().merge(user); System.out.println(":"+user.getId()); 输出3: Hibernate: insert into user (userid, userpwd, userques, userans, usermail, integral, grade, sex, realname) values (?, ?, ?, ?, ?, ?, ?, ?, ?) :11 当我们使用merge的时候,执行完成,我们提供的对象A还是脱管状态,hibernate或者new了一个B,或者检索到 一个持久对象B,并把我们提供的对象A的所有的值拷贝到这个B,执行完成后B是持久状态,而我们提供的A还是托管状态 继续看代码: super.getHibernateTemplate().save(user); user.setUserans("杭州BST"); System.out.println(":"+user.getId());输出: Hibernate: insert into user (userid, userpwd, userques, userans, usermail, integral, grade, sex, realname) values (?, ?, ?, ?, ?, ?, ?, ?, ?) :13 Hibernate: update user set userid=?, userpwd=?, userques=?, userans=?, usermail=?, integral=?, grade=?, sex=?, realname=? where id=? super.getHibernateTemplate().merge(user); user.setUserans("杭州BST"); System.out.println(":"+user.getId()); ------------------------- Hibernate: insert into user (userid, userpwd, userques, userans, usermail, integral, grade, sex, realname) values (?, ?, ?, ?, ?, ?, ?, ?, ?) :0 其实,我们也可以这样显示修改状态。 user = (User)super.getHibernateTemplate().merge(user); user.setUserans("杭州BST"); System.out.println(":"+user.getId()); -------------------- Hibernate: insert into user (userid, userpwd, userques, userans, usermail, integral, grade, sex, realname) values (?, ?, ?, ?, ?, ?, ?, ?, ?) :16 Hibernate: update user set userid=?, userpwd=?, userques=?, userans=?, usermail=?, integral=?, grade=?, sex=?, realname=? where id=? 转载: [url]http://www.blogjava.net/beijing2008/articles/317924.html[/url]