我在我的应用程序中使用hibernate 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();
上面代码中的问题,这里的sms和取消表数据正在保存,但更新不起作用,也没有显示任何错误。
它并非在每种情况下发生,有时它不会更新
两个不同的会话有问题吗?
答案 0 :(得分:0)
在两个不同的会话中没有任何错误。
以下是代码中发生的事情:
首先,您从数据库获取对象并关闭会话
Collection collection = openSession(); session.load().... session.close(); 强>
然后设置Collection对象。 的 setCollection(集合); 强>
现在它将扮演一个Detached对象。如果在此之后做任何transaction.com,你的对象将在数据库中提交,即使你正在保存一些其他对象,你正在保存第一个对象的第一部分。
在第二个交易中没有任何更新,所以它没有得到更新。