对不起,如果有人已经回答了这个具体问题,但我还没有找到我的问题的答案,所以在这里。休眠Session.flush()效率问题
我正在研究一个应用程序(不能,因为它是一个工作,所以我对此感到抱歉),它使用DAO,Hibernate和POJO以及所有这些东西来进行通信和写入数据库。这适用于应用程序,假设我在调用Session.flush()时没有大量数据来检查。话虽如此,有一个页面,用户可以添加任意数量的项目到一个产品,并且有一个特定的情况,其中有25个项目的内容。每个项目有大约8个字段,全部存储在数据库中。当我调用flush时,它会将所有内容保存到数据库中,但需要FOREVER才能完成。三条线我打电话是:
merge(myObject);
Session.flush();
Session.refresh(myObject);
我已经尝试了很多事情来解决这个问题,和一些不同的解决方案,以便回来,说:“不要用流感略有相似之处()” ISN不同的组合因为saveOrUpdate()和其他休眠会话似乎不起作用。我能想到的唯一解决方案是废弃整个项目(我们得到的代码是遗传的,编写得很少),或者告诉用户社区吸收它。
这是我从Hibernate API的理解,如果你想写数据到数据库,它会对每个项目运行一次检查,如果有差异,它会创建一个更新查询队列,然后运行查询。看起来这些数据每次都在更新,因为即使其他值不变,我数据库中的“DATE_CREATED”列也是不同的。
我想知道的是,如果有另一种方法来阻止如此大量的数据提交或从“check”hibernate中排除特定列的方式,那么我不必提交所有25个项目,如果我只改变了1?
在此先感谢。
迈克
25并不是真的那么多,除非物体是巨大的。无论如何,每个项目是在自己的会话中处理的,还是都在冲洗前被添加到会话中? – hvgotcodes
好吧,原来它更像是60+对象哈哈。我不记得这么多,但现在有多少。尽管每个项目都被添加到同一个会话中,但最后我会调用flush。我试着将POJO中的dateCreated字段设置为updatable = false,作为确保检查不会发生在该字段上的问题,但这不起作用。有什么想法? –
你需要弄清楚什么是花时间。是对象操作,数据库插入,无论什么...... – hvgotcodes