gpt4 book ai didi

java - Hibernate 对象刷新未发生

转载 作者:行者123 更新时间:2023-12-01 04:58:23 26 4
gpt4 key购买 nike

我遇到一个问题,即在 Hibernate 外部(使用 MySQL Workbench)更新的对象未刷新。发生的情况是,我调用 Hibernate 应用程序并检查值,然后使用 Workbench 更新对象的值,保存并检查该值是否已设置,并在刷新后在 Hibernate 中进行另一次调用,但仍然是旧的值(value)就在那里。该对象确实在第三次调用时刷新,但我需要立即发生这种情况 - 在这种情况下我无法使用旧数据。

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 中,我们有 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();

关于java - Hibernate 对象刷新未发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13739446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com