外部插入记录时,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搜寻时尝试了几种解决方案,例如将集合设置为脏。没有工作。 还有其他我没看过的东西吗? 附言首先在Hibernate 3.2.7上尝试过。升级到3.3.2,没有区别。     

解决方法

在花费了95%的时间入侵Hibernate之后,它已被免除。 这个问题是由于MySQL的查询缓存而引起的,尽管有这个名字,它也缓存结果集以进行可重复的读取。这是由于在MySQL的InnoDB上具有多版本控制的特性。 为了“为快照设置新的时间点”,即使只有选择查询,也要将您的工作单元包装在事务中。 进一步阅读... http://forums.mysql.com/read.php?39,416790,416790 http://dev.mysql.com/doc/refman/5.0/zh-CN/query-cache.html     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...