框架是:hibernate3+spring2.5
这个问题是我连续两次想要get一个实体类得时候出现的,字面意思是在hibernate中同一个session里面有了两个相同标识,但是是不同实体。纠结了很多天都没答案。
public User getUserById(int id) {
User u = new User();
u = (User)this.hibernateTemplate.get(User.class, id);
return u;
}调用这个方法的代码为:User u1 = (User)us.getUserById(35);
User u2 = (User)us.getUserById(51);请各位帮帮忙,网上说的1、session.clean();2、session.refresh(object);3、session.merge(object)
都没有用啊

解决方案 »

  1.   

    你的是不是在session中名字相同了啊
      

  2.   

    不是吧?我用的是spring的事务管理机制,自动管理session的
      

  3.   

    下面是我的beans.xml对事务的配置<bean id="txManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <tx:annotation-driven transaction-manager="txManager"/>在每一个service事务中我都用了注解@Transanctional,应该没问题吧
      

  4.   

    我终于把问题找出来了,问题出在我后来的User u1 = (User)us.getUserById(35);
    User u2 = (User)us.getUserById(51);
    m.setSendUser(u1);
    m.setRecvUser(u2);
    System.out.println(m.getSendUser().getUsername());
    ms.add(m);

    因为我的ms.add(Msg msg)方法中我用了hibernateTemplate.save(msg)的方法。应该改为hibernateTemplate.merge(msg);问题解决