【问题标题】:Hibernate collection not updated when records inserted externally外部插入记录时未更新 Hibernate 集合
【发布时间】:2011-05-25 03:20:49
【问题描述】:

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

二级缓存被禁用。

示例...

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();

我在谷歌搜索时尝试了几种解决方案,例如将集合设置为脏。没有任何效果。

还有什么我没看过的吗?

附:首先在 Hibernate 3.2.7 上尝试。升级到3.3.2,没区别。

【问题讨论】:

    标签: hibernate


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2017-04-03
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多