如何将所有数据以块的形式插入到数据库中

时间:2015-12-23 10:46:18

标签: java hibernate postgresql out-of-memory gson

我尝试使用以下方法一次插入所有数据:

userModel.setServiceData(gson.toJson(sortedResponse).getBytes());

这为大量数据提供了内存。

所以我试图使用类似的东西将块中的数据添加到postgres数据库中:

byte[] chunkedMessage = {};

for (Iterator<Message> iterator = sortedResponse.iterator();  iterator.hasNext();) {
    Message message = (Message) iterator.next();
    chunkedMessage = gson.toJson(message).getBytes();
    userModel.setServiceData(chunkedMessage);
}

显然,这将最终存储最后一个块而不是所有块。

我正在使用hibernate,所以想一想hibernate查询是否有任何简单方法,或者可能像上面代码中的内容一样简单。

1 个答案:

答案 0 :(得分:0)

不要使用数组(byte[]),因为它需要为要插入数据库的完整数据分配内存并切换到流。将userModel.serviceData的类型从byte[]更改为java.sql.Blob,这允许从InputStream或Reader创建新的Blob实例:

Blob blob = Hibernate.getLobCreator(session).createBlob(stream, size);