Hibernate对象刷新没有发生

时间:2012-12-06 08:13:03

标签: java hibernate

我遇到一个问题,即在Hibernate之外更新的对象(使用MySQL Workbench)没有刷新。发生的事情是我调用Hibernate应用程序并检查值,然后使用Workbench对对象的值进行更新,保存并检查该值是否已设置并在刷新后仍在旧的Hibernate中再次调用价值就在那里。该对象确实会在第三次调用时被刷新,但我需要立即执行此操作 - 在此实例中我无法使用旧数据。

Query q = session.createQuery("SELECT object(o) FROM PortedNumber o WHERE o.number = '" + agiRequest.getDnid() + "'");
List<PortedNumber> portedNumberList = q.list();
if (!portedNumberList.isEmpty()) {
   for (PortedNumber portedNumber : portedNumberList) {
      session.evict(portedNumber);
      session.refresh(portedNumber, LockOptions.READ);
      networkId = portedNumber.getNetwork().getId();
      logger.info("Number is ported to networkId = " + networkId);
      break;
   }
}

我更新的值是'portedNumber.getNetwork()。getId()'。 任何指导都是最常见的

感谢。

1 个答案:

答案 0 :(得分:0)

在Hibernate 3中,我们有merge()(在Hibernate 2中,使用saveOrUpdateCopy())。此方法将强制Hibernate将来自其他分离实例的任何更改复制到要保存的实例上,从而在保存之前合并内存中的所有更改。

Session session = sessionFactory1.openSession();
Transaction tx = session.beginTransaction();
Item item = (Item) session.get(Item.class, new Long(1234));
tx.commit();
session.close(); // end of first session, item is detached

item.getId(); // The database identity is "1234"
item.setDescription("my new description");
Session session2 = sessionFactory.openSession();
Transaction tx2 = session2.beginTransaction();
Item item2 = (Item) session2.get(Item.class, new Long(1234));
Item item3 = session2.merge(item); // Success!
tx2.commit();
session2.close();