在外部插入记录时,Hibernate集合未更新

时间:2011-05-25 03:20:50

标签: hibernate

当我在另一个应用程序中向外部添加项目时,我没有更新的映射集合。

禁用二级缓存。

示例...

session = HibernateDataSource.openSession();
User dao = (User) session.load(User.class, 2434152);
// No items now, this gives 0
System.err.println(dao.getItems().size());
session.close();
Thread.sleep(10000);
// Add an item outside, e.g. in PMA
session = HibernateDataSource.openSession();
HibernateDataSource.getSessionFactory().evict(User.class);
HibernateDataSource.getSessionFactory().evict(UserItem.class);
HibernateDataSource.getSessionFactory().evictCollection(User.class.getName() + ".items");
dao = (User) session.load(User.class, 2434152);
// Still zero
System.err.println(dao.getItems().size());
session.close();

我在google搜索时尝试了几种解决方案,例如将集合设置为脏。没有工作。

还有其他我没看过的东西吗?

P.S。首先尝试使用Hibernate 3.2.7。升级到3.3.2,没有区别。

1 个答案:

答案 0 :(得分:1)

在花费95%的时间进入Hibernate之后,它已被免除。

问题出现是由于MySQL的查询缓存,尽管有名称,但它还缓存了可重复读取的结果集。这是由于MySQL的InnoDB上的多版本控制的性质。

为了“为快照设置新的时间点”,即使只有选择查询,也要将您的工作单元包装在一个事务中。

进一步阅读...

http://forums.mysql.com/read.php?39,416790,416790

http://dev.mysql.com/doc/refman/5.0/en/query-cache.html