Hibernate实体不在应用程序中更新,它在数据库中更新

时间:2012-10-10 20:32:55

标签: hibernate

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

一个简单的例子。

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" !!!!!!!

正如你所看到的,没有,刷新,提交,刷新,保存,没有任何作用。但是我的数据库更新了,实体不是。

请帮助。

1 个答案:

答案 0 :(得分:0)

经过一整天的阅读博客和帖子,我可以找到解决这个问题的方法。基本上,问题是这样的:当你想获得一个给定实体的更新实例及其所有属性"正确"更新,并且要这样做,您的业务逻辑需要遍历对象以到达给定的实体,您需要设置lazy =" false"在中间对象的集合映射标记中。我的例子:

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

要获取Patio对象及其属性已更新(之前位于项目的其他部分),您需要映射 House Neighbors 的集合到

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

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

为了更好地解释,请查看专家:6.2. Collection mappings