我只需要使用Hibernate读取MySQL数据库中表中的每一行,并根据它编写一个文件.但是有9000万行,它们非常大.所以看起来以下是合适的:
ScrollableResults results = session.createQuery("SELECT person FROM Person person")
.setReadOnly(true).setCacheable(false).scroll(ScrollMode.FORWARD_ONLY);
while (results.next())
storeInFile(results.get()[0]);
Run Code Online (Sandbox Code Playgroud)
问题是上面将尝试将所有9000万行加载到RAM中,然后再转到while循环...这将使OutOfMemoryError消除我的内存:Java堆空间异常:(.
所以我猜ScrollableResults不是我想要的?处理这个问题的正确方法是什么?我不介意这个while循环需要几天(好吧我不喜欢它).
我想处理这个问题的另一种方法是使用setFirstResult和setMaxResults迭代结果,只使用常规的Hibernate结果而不是ScrollableResults.这感觉就像它效率低下一样,当我在8900万行中调用setFirstResult时,它将开始花费一段可笑的时间......
更新:setFirstResult/setMaxResults不起作用,事实证明需要花费相当长的时间才能达到我所担心的偏移量.这里一定有解决方案!这不是一个很标准的程序吗?我愿意放弃Hibernate并使用JDBC或其他任何东西.
更新2:我提出的解决方案哪个工作正常,不是很好,基本上是以下形式:
select * from person where id > <offset> and <other_conditions> limit 1
Run Code Online (Sandbox Code Playgroud)
由于我有其他条件,即使是索引中的所有条件,它仍然没有我想要的那么快......所以仍然可以提供其他建议..
有没有办法在代码中捕获全局 "崩溃"应用程序异常,如objc_exception_throw,EXC_ARITHMETIC等?我需要这个,因为我想在应用程序被系统杀死之前做一些事情.
我有以下HTML.
<ul>
<li>
<a>asdas</a>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
在我的CSS样式表中,我有一个标签的常规设置,以及几个有争议的行后来设置为ul li a.像这样:
a:link
{
color: red;
}
...
ul li a
{
color:blue;
}
Run Code Online (Sandbox Code Playgroud)
Firebug告诉我,首先是颜色:蓝色被加载,然后被颜色覆盖:红色
到目前为止我一直认为,加载css文件的顺序和单个css文件中的样式顺序告诉浏览器如何html元素应格式化.不幸的是,我现在正在体验它,反之亦然.
那么告诉我,我如何纠正我的风格,以实现li内部的标签呈现蓝色而不是红色?
在WinForms应用程序中,我需要检测何时双击System.Windows.Forms.WebBrowser的内容,然后打开自定义winform对话框.
我注意到WebBrowserBase禁用了Control.DoubleClick事件,但我还没有弄清楚如何覆盖此行为.
是否有一种方法可以在Zend Framework或默认PHP中将国家/地区(使用国家/地区代码)映射到时区列表?作为一个例子,我正在尝试在搜索"现在在澳大利亚的时间"时复制Google功能,该时间显示该国家/地区的所有时区和城市.
#include<iostream.h>
template<class T>
class Sample
{
public:
Sample();
static int i;
};
template<class T>
int Sample<T>::i = 0;
template<class T>
Sample<T>::Sample()
{
i++;
cout<<i;
}
void main()
{
Sample<int>s1;
Sample<float>s2;
Sample<char>s3;
}
Run Code Online (Sandbox Code Playgroud)
输出:111
我退出的原因是什么?
考虑下面的C++ 0x代码:
a_signal.connect([](int i) {
if(boost::any_cast<std::string>(_buffer[i]) == "foo")
{
base_class<>* an_object = new derived_class();
an_object->a_method(_buffer[i]);
}});
Run Code Online (Sandbox Code Playgroud)
如何在Boost Lambda中正确查看(因为此C++ 0x功能尚未在GCC 4.4中使用)?
我想在数学模式中将左箭头放在字母上.我正在寻找完全相反的矢量符号\vec{x}.我试着用它\stackrel{\leftarrow}{x},但看起来不太好.
谢谢.