说我有像
这样的JPASELECT x FROM Person
现在,我希望在从数据库加载数据时监视Hibernate的进度,以便我可以向用户显示进度条。这样的事可能吗?我知道我可以显示不确定进度条,但是如何显示确定进度条呢?
感谢。
答案 0 :(得分:0)
AFAIK实际上并不可能,因为你无法获得数据库查询的状态(已经加载了多少行等),因此你必须等待它完成。
然后,Hibernate会从结果中创建实体,尽管你可能会在这里拦截,但我怀疑Hibernate提供了一些有用的钩子。所以可能能够告诉Hibernate何时完成从数据库加载结果以及何时创建/更新所有必需实体。
或者,您可以尝试批量加载实体,即首先获取结果数,然后加载单个块(例如0-99,100-199,......)。由于您知道结果的数量,因此您可以计算块的数量,并且可以在块之间更新进度条。但请注意,这会降低性能,尤其是在查询非常复杂的情况下。