当前位置: 首页 > 面试题库 >

Hibernate读取功能可显示旧数据

暨嘉
2023-03-14
问题内容

我在显示数据库中的数据时遇到问题。如果更新对象,有时会得到旧数据,有时会得到新数据。更新功能运行良好(我可以在数据库中看到正确的更新),而读取功能似乎可以获取缓存的数据。我试图禁用两个缓存,尝试在更新/保存期间打开和关闭会话,但仍然无法正常工作。用户bean和商店bean都具有懒惰访存。谢谢!

读取功能:

    public static List<Store> getStoreByUser(User user)
        throws HibernateException {
    List<Store> result = null;
    Session session = sessionFactory.getCurrentSession();   
    Transaction transaction = null;
    try {
        transaction = session.getTransaction();
        Criteria criteria = session.createCriteria(Store.class);
        criteria.add(Restrictions.eq("userUserID", user));
        result = criteria.list();
    } catch (HibernateException he) {
        logger.error("No Store found for user: = " + user, he);
        throw he;
    }
    return result;
}

更新/保存功能:

    public static Integer insertOrUpdateStore(Store store)
        throws HibernateException {
    Integer id = null;
    Session session = sessionFactory.getCurrentSession();   
    Transaction transaction = null;
    try {
                    transaction = session.getTransaction();
        if (store.getStoreID() != null && store.getStoreID() != 0) {

            session.merge(store);
            transaction.commit();

        } else {
                id = (Integer) session.save(store);
            transaction.commit();               
        }
    } catch (HibernateException he) {
        if (transaction != null) {
            transaction.rollback();
        }
    } finally {
    }       
    return id;
}

问题答案:

通常,您具有隔离级别
“已读读”。这使您的事务可以查看其他事务已提交的更改。隔离级别由基础dbms实现,而不是由hibernate模式实现。

您不能禁用第一级缓存(可能通过使用无状态会话,不应将其用于一般用途)。执行查询时,NH总是从缓存中返回值,以确保在内存中不会一次获得相同的数据库记录。

如果这是您的问题,则应切换到更高的隔离级别。例如可重复读取(这意味着它的意思:多次读取相同的数据时,您总是会得到相同的结果)。仍然有机会看到其他交易的变化。使用隔离级别可序列化的隔离,您不再应该遇到这种问题。

注意:切换到另一个隔离级别是大多数系统的重大更改,应仔细计划。



 类似资料:
  • 问题内容: 如何从.txt文件读取和显示数据? 问题答案: 然后,您可以使用in.readLine(); 一次读取一行。要读到最后,可以这样编写while循环:

  • 本文向大家介绍基于PHP实现数据分页显示功能,包括了基于PHP实现数据分页显示功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了数据分页显示功能的PHP实现代码,供大家参考,具体内容如下 实现代码: 以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 我有一堆图像,格式类似于Cifar10(二进制文件,每个图像字节),一个接一个(STL-10数据集)。我打开的文件有138MB。 我试图阅读并检查包含图像的张量的内容,以确保阅读正确,但是我有两个问题- 是否加载整个文件,但是一次只提供一个输入?由于读取第一个字节应该相对较快。但是,该代码大约需要两分钟才能运行。 如何获得可显示格式的实际图像内容,或在内部显示它们以验证图像是否被正确阅

  • 我有一个使用chart.js创建的条形图。页面加载时一切正常,但当我使用daterangepicker更改时间范围时,出现了一个小故障。新数据被引入,但当我将鼠标悬停在上面时,旧数据会显示出来。我是javascript新手,希望能得到一些帮助。看起来我需要合并。销毁();不知怎么的,但我不知道怎么做。下面是我的代码片段: 破坏原始数据的最佳方法是什么,以便当我更改日期范围并将鼠标悬停在新图表上时,

  • 本文向大家介绍thinkphp实现分页显示功能,包括了thinkphp实现分页显示功能的使用技巧和注意事项,需要的朋友参考一下 先上效果图,突然发现和B站上一样 IndexController.class.php代码如下 index.html代码如下 css代码如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。