Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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_Hibernate_Grails_Stored Procedures_Gorm - Fatal编程技术网

Java 在存储过程进行更改后,如何刷新hibernate对象

Java 在存储过程进行更改后,如何刷新hibernate对象,java,hibernate,grails,stored-procedures,gorm,Java,Hibernate,Grails,Stored Procedures,Gorm,在我的grails应用程序中,我们调用的存储过程可能会更新数千条记录。在存储过程调用之后,我需要以json格式将这些记录中的许多发送回UI。但是,hibernate会在存储过程完成后继续查看旧对象。我已经在这些对象中的每一个上尝试了execute(),并使用HQL再次加载它们,但没有效果 解决这个问题的最好办法是什么。答案在于问题。:)使用refresh()。参考 如果要完全清除hibernate会话,则可以使用session.clear()。参考 为此,您需要掌握当前会话,您可以通过两种方式进

在我的grails应用程序中,我们调用的存储过程可能会更新数千条记录。在存储过程调用之后,我需要以json格式将这些记录中的许多发送回UI。但是,hibernate会在存储过程完成后继续查看旧对象。我已经在这些对象中的每一个上尝试了execute(),并使用HQL再次加载它们,但没有效果


解决这个问题的最好办法是什么。

答案在于问题。:)使用
refresh()
。参考

如果要完全清除hibernate会话,则可以使用
session.clear()
。参考 为此,您需要掌握当前会话,您可以通过两种方式进行:

  • 获取
    会话工厂
    ,获取当前会话并清除该会话。
    grailsApplication.mainContext.sessionFactory.currentSession.clear()

  • 与session一起使用
    关闭

    DomainABC.with会话{s->s.clear()}


  • 我使用HQL加载了至少数百个对象,但我不想在每个对象上单独提取和运行refresh()。应该有办法从hibernate会话/缓存中清除所有对象。@user593644请参阅更新以获得答案。您可以使用
    clear
    清除会话。刷新()和会话。清除()对我不起作用。我尝试运行本机查询来获取数据,我认为在直接从数据库获取数据方面,本机查询的性能比HQL查询要好。但是,即使这样,失败的次数也超过了25%。然后我添加了一个
    session.flush()
    会话。清除()
    线程睡眠(2000)在获取数据之前。现在,它似乎运行良好,尽管我不知道为什么会这样?我不希望groovy.sql.sql.execute()是异步的。我很困惑。