Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠对象刷新未发生_Java_Hibernate - Fatal编程技术网

Java 休眠对象刷新未发生

Java 休眠对象刷新未发生,java,hibernate,Java,Hibernate,我有一个问题,在Hibernate之外使用MySQL Workbench更新的对象没有得到刷新。发生的情况是,我调用Hibernate应用程序并检查值,然后使用Workbench更新对象的值,保存并检查值是否已设置,并在刷新后在Hibernate中执行另一个调用,而旧值仍然存在。在第三次调用时,对象确实会重新刷新,但我需要立即执行此操作-在这个实例中,我无法使用旧数据 Query q = session.createQuery("SELECT object(o) FROM PortedNumbe

我有一个问题,在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”。 任何指导都是最重要的


谢谢。

在Hibernate 3中,我们在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();

您是否建议我在查看值之前关闭会话并再次查询它?是的。如果您不再需要旧数据,这是正确的。如果你需要它,就克隆它=session.close没有帮助。顺便说一句:我不是在处理一个分离的对象,我是在处理一个在执行SELECT之前被更新的对象,这个SELECT没有反映更新。这很有效!谢谢但是,我不得不将整个应用程序中的数据库调用量增加一倍,这非常令人恼火。