Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Hibernate会话不反映应用程序外部所做的更改_Java_Mysql_Hibernate - Fatal编程技术网

Java 为什么Hibernate会话不反映应用程序外部所做的更改

Java 为什么Hibernate会话不反映应用程序外部所做的更改,java,mysql,hibernate,Java,Mysql,Hibernate,我正在开发一个Java应用程序,它可以快速检查客户机数据库表中的更新,如果发现任何更新,则使用Hibernate和MySQL将其传输到服务器数据库 当我们使用hibernate会话更改数据库时,它工作得很好,但每当我使用MySQL Workbench更改数据库表值时,它都会返回与以前相同的记录 如何使用hibernate会话更新表中的外部更改 public List<com.ctpl.models.client.MasterTable> getAllClientMasterTable

我正在开发一个
Java
应用程序,它可以快速检查客户机数据库表中的更新,如果发现任何更新,则使用
Hibernate
MySQL
将其传输到服务器数据库

  • 当我们使用hibernate会话更改数据库时,它工作得很好,但每当我使用
    MySQL Workbench
    更改数据库表值时,它都会返回与以前相同的记录
  • 如何使用hibernate会话更新表中的外部更改

    public List<com.ctpl.models.client.MasterTable> getAllClientMasterTableWithServerFlag() {
        try {
            clientSession = ClientHibernateUtil.getSessionFactory().openSession();
            clientSession.flush();
    
            Criteria criteria = clientSession.createCriteria(com.ctpl.models.client.MasterTable.class);
            criteria.add(Restrictions.eq("serverFlag", 0));
    
            List<com.ctpl.models.client.MasterTable> clientMasterTables = criteria.list();
            clientSession.close();
            return clientMasterTables;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    
    公共列表getAllClientMasterTableWithServerFlag(){
    试一试{
    clientSession=ClientHibernateUtil.getSessionFactory().openSession();
    clientSession.flush();
    Criteria=clientSession.createCriteria(com.ctpl.models.client.MasterTable.class);
    添加(Restrictions.eq(“serverFlag”,0));
    List clientMasterTables=criteria.List();
    clientSession.close();
    返回clientMasterTables;
    }捕获(例外e){
    e、 printStackTrace();
    返回null;
    }
    }
    

    我在这里遗漏了什么?

    看看Session.clear()或execute方法

    请参阅本文:


    希望这有帮助,我们只需要在hibernate中添加连接池,如下所示


  • 找到了使用

    轻松实现它的最佳方法您可能忘记了在MySQL workbench中提交事务。或者您没有修改您认为正在修改的表/数据库。亲爱的@JBNizet我对数据库/表非常确定,在MySQL Workbench中,它是自动提交的,顺便说一句,我也在手动提交。然后您可能配置了二级缓存,并且正在从该缓存中获取过时值。Boss@JBNizet没有二级缓存,但我认为这是因为一级缓存,但我已读到,我们无法更改第一级缓存,请使用任何其他解决方案…第一级缓存与会话实例相关联,并且您的方法创建了一个新会话,所以…谢谢你的回复@Godwin,但是你关于
    session.clear()
    的想法在这种情况下不起作用。顺便说一句,它会在每次请求时强制hibernate.cfg.xml文件重新配置,所以我认为这不是一个好主意,尽管它在这里不起作用。