openSessionInView中的问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 09:28:19
Emp e = (Emp)getHibernateTemplate().get(Emp.class,id);
System.out.println(e.getName());
e.setName("abc");
Emp e2 = (Emp)getHibernateTemplate().get(Emp.class,id);
System.out.println(e2.getName());
第二次显示的是abc,如何解决这个问题,请高手指点一下
我需要显示的是原来的那个name

get(Emp.class,id); 请注意这个class和这个id,明显,这句话的意思就是返回emp这个类所创建的实例中id属性为id的对象引用。

两句话你指向的是同一个对象实例,第一次对象实例显示之后你就将该实例name进行update,自然,第二次实例出来的就是abc了。

猜想,是不是你需要指向不同的id对象?
如果不是,要不就先把你要做的update的动作放到一个队列中,先执行其他的query动作,等这些动作全部做完后,在从update队列中取出这些动作依次执行。

1,System.out.println(e.getName());
你的这句话是输出原来的name,
2,但是你又e.setName("abc");重新set了name
然后如果你直接输出name则肯定是改过的name。(只要保证没update)
3,你的代码中的e2是重新从库里查询出来的那么应该还是原来的值,你再测试下吧

好像指向同一个对象了。你在emp e2=new emp();试一下。。。。

如果e、e2这两个get方法中的id相同,那么这两个对象的内容就相同,原因很简单:get这个方法都是去访问emp这个表里面的数据,如果id相同,那么他们查询的select语句相同,得到的结果就会相同。如果想让得到原有的name那么就应该先把原有的给持久化,才能得到,回写到表里就可以了。