0

我在我的应用程序中使用休眠 3,有一种情况是我插入两条记录并更新一条记录:-

  SessionFactory sf = HibernateUtils.getSessionFactory();
        session = sf.openSession();
        tx = session.beginTransaction();
        Collection collection = session.load(Collection.class, "12345");    
        tx.commit();
// using this way i am getting this object from database. 
setCollection(collection);//Here i am setting this object in one POJO class

现在在其他功能

我又得到了这个对象......

Collection collection=getCollection(); //here it is detached

现在首先我使用以下方法将数据保存在一个表中:-

 SessionFactory sf = HibernateUtils.getSessionFactory();
            session = sf.openSession();
            tx = session.beginTransaction();
    Sms sms=new Sms();
        sms.setMessage(collection.getMesage());
       session.save(sms);
       tx.commit();
       session.flush();
       session.close();

然后我在同一个会话中更新并插入两条记录

SessionFactory sf = HibernateUtils.getSessionFactory();
            session = sf.openSession();
            tx = session.beginTransaction();
    Cancel cancel=new Cancel();
        cancel.setMessage(collection.getMesage());
       session.save(cancel);
       session.update(collection);
       tx.commit();
       session.flush();
       session.close();

上面代码中的问题,这里在短信和取消表中的数据正在保存但更新不起作用,它也没有显示任何错误。

它并非在每种情况下都会发生,有时它不会更新

两个不同的会话有什么问题吗?

4

1 回答 1

0

不,参加两个不同的会议没有任何问题。

这是您的代码中发生的事情:

首先,您从数据库中获取对象并关闭会话

集合集合=openSession(); session.load()....session.close();

然后你正在设置 Collection 对象。 集合(集合);

现在它将扮演一个分离的对象。如果在此之后执行任何 transaction.commit,即使您正在保存其他一些对象,您的对象也将在数据库中提交,这是您在保存第一个对象的第一部分中所做的。

在第二个事务中,没有什么要更新的,所以它没有得到更新。

于 2013-07-19T10:08:34.523 回答