Hibernate会话重叠

时间:2014-02-19 14:10:02

标签: java hibernate session

我正在使用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());

0 个答案:

没有答案