你所提到的帖子是对于多步操作可以进行Session的flush操作。可是我这里Hibernate的自动恢复集合对象中的元素,是不可以进行flush操作的。请问:有没有什么解决的方法,谢谢!!!
我的意思可以用代码表示如下:
|
1.关闭Hibernate缓存,如何关闭,在我上面链接中的文章有介绍。
2.直接使用JDBC,借助其他专门批量数据优化的框架提升性能,如Jdon框架等。
关于改变JVM的Heap尺存,见
Setting Heap Sizes
用list()查询时,一次执行整个查询,并将查询的结果放在二级缓存中,你查询的对象又几万条,当然会造成内存溢出。
而用iterator则不同,iterator()方法是用到时才执行查询操作
也就是说当你真正要对某个对象进行操作时才会执行查询操作。
iterator()方法在执行时不会一次初始化所有的对象,而是根据对结果集的访问情况来初始化对象。因此在访问中可以控制缓存中对象的数量,以避免占用过多缓存,导致内存溢出情况的发生。使用iterator()方法的另外一个好处是,如果只需要结果集中的部分记录,那么没有被用到的结果对象根本不会被初始化。所以,对结果集的访问情况也是调用iterator()方法时执行数据库SQL语句多少的一个因素。
这样效率也太低了。
或者
createQuery().scroll()
[该贴被yellowcat于2009-06-06 12:15修改过]