0

我要求您回答以下问题:实体状态未在应用程序中更新但在数据库中更新的原因是什么。

一个简单的例子。

System.print.out.println(patio.getName()); // = "HisYard"
patio.setName("MyYard");
session.saveOrUpdate(patio);
session.persists(patio);
session.flush();
session.commit();
session.disconnect();

------MySql Database-------
id_patio = 3
name = "MyYard"
------Database-------

Later on the same application...

Session session = HibernateUtil.getSessionFactory().openSession();
int niceNeigborhood = 3;
Neighborhood neighborhood = (Neighborhood)session.load(Neighborhood.class, niceNeigborhood);
session.refresh(neighborhood);
String whosYardIsThis = neighborhood.getHouse().getPatio().getName();
System.print.out.println(whosYardIsThis); // = "HisYard" !!!!!!!

如您所见,没有什么,刷新,提交,刷新,保存,没有任何工作。但是我的数据库已更新,实体未更新。

请帮忙。

4

1 回答 1

0

经过一整天阅读博客和帖子后,我可以找到解决此问题的方法。基本上,问题是这样的:当您想要获取给定实体的所有属性“正确”更新的更新实例时,您的业务逻辑需要遍历对象以到达给定实体,您需要设置惰性中间对象的集合映射标签中的="false"。我的例子:

String whosYardIsThis = neighborhood.getHouse().getPatio().getName();

要获得属性真正更新的 Patio 对象(以前在项目的其他部分中),您需要将House邻居集合映射到

<set name="neighborhood" inverse="true" cascade="all-delete-orphan" lazy="false">

因此数据始终是最新的,从数据库中获取,而不是从麻烦的缓存中获取。

为了比我更好的解释,请检查专家:6.2。集合映射

于 2012-10-11T05:46:50.793 回答