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