我正在使用Hibernate来读/写数据。
情况是我在一个记录上有2个进程合作。进程A打开一个会话,在事务中将记录写入数据库,然后关闭会话。之后,进程B立即打开一个会话并尝试读取(在事务中)进程A写入的数据。
我遇到的问题是,进程B有时会成功读取进程A写入的数据,有时进程B无法读取新记录。
为了克服这个问题,在进程B中,我尝试关闭尝试读取数据的事务,等待一秒,打开一个新事务,这次,数据被成功获取!!!我真的没有解决方案。
你能解释一下情况吗?
更新1:添加代码
流程A的代码:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Person p = new Person();
p.setID(1234);
p.setName("Truong Nguyen");
session.save(p);
tx.commit();
session.close();
//here is code to inform process B a data is added
//...
流程B上的代码:注意:此代码仅在完成上述流程A代码之后执行。
Session session = sessionFactory.openSession();
Person p = new Person();
p.setID(1234);
Transaction tx = session.beginTransaction();
List results = session.createCriteria("com.sample.Person")
.add(Example.create(p))
.list();
log.debug("Result size: " + results.size());
tx.rollback();
结果有时为0,有时为1.但是如果我在进程B上更改代码如下,则它总是返回1.
Session session = sessionFactory.openSession();
Person p = new Person();
p.setID(1234);
Transaction tx = session.beginTransaction();
List results = session.createCriteria("com.sample.Person")
.add(Example.create(p))
.list();
tx.rollback();
if (results.size() == 0) {
try {
Thread.sleep(1000);
}
catch (Exception e){}
tx = session.beginTransaction();
results = session.createCriteria("com.sample.Person")
.add(Example.create(p))
.list();
tx.rollback();
}
log.debug("Result size: " + results.size());