我想从数据库中查询表,比如
select * from TABLE1
TABLE1有大约1500万条记录。 有一个hibernate类Table1.java
@Table(name = "TABLE1")
public class Table1 implements Serializable{
@Column(name = "ID")
private Long id;
@Column(name = "Name")
private String name;
.. more columns
.. getters and setters
}
如果我使用hibernate查询并返回整个列表,它将占用大量内存。 相反,我想获取每一行,将对象序列化为一个文件,然后采取下一行并序列化它,依此类推。我的目标是将数据序列化为文件,这样我就不必将结果列表保存在内存中。
为了节省内存,我将结果作为ScrollableResults。我需要将ScrollableResults的结果序列化为文件,我需要逐行执行,这样我就不会在内存中保留任何内容。
public static void main(String args[]) {
try {
StatelessSession statelessSession = HibernateUtil
.getSessionFactory().openStatelessSession();
statelessSession.beginTransaction();
ScrollableResults results = statelessSession
.createSQLQuery("select * from TABLE1").setCacheable(false)
.setReadOnly(true).scroll(ScrollMode.FORWARD_ONLY);
results.close();
statelessSession.close();
} catch (Exception e) {
System.out.println(e);
}
}
实际上,我需要从数据库中读取并立即对其进行序列化而不保留在内存中。怎么做到这一点?