在Hibernate中映射byte []并按块添加文件块

时间:2010-11-21 23:10:00

标签: java hibernate postgresql jdbc java-ee

我有网络服务,通过块接收100 Mb视频文件

public void addFileChunk(Long fileId, byte[] buffer)

如何使用hibernate将此文件存储在Postgresql数据库中?

使用常规JDBC非常简单。我会在我的Web服务方法中使用以下代码:

 LargeObject largeObject = largeObjectManager.Open(fileId, LargeObjectManager.READWRITE);
                    int size = largeObject.Size();
                    largeObject.Seek(size);
                    largeObject.Write(buffer);
                    largeObject.Close();

如何使用Hibernate实现相同的功能?并按块存储此文件?

将每个文件块存储在单独的行中,因为bytea似乎不是那么聪明的主意。皮斯建议。

2 个答案:

答案 0 :(得分:1)

现在建议将100MB文件存储在数据库中。我会将它们存储在文件系统中,但考虑到事务处于活动状态,使用Servlet似乎是合理的。

  1. 处理http请求,以便将文件(接收到的)存储在某个临时位置。
  2. 打开事务,保留文件元数据,包括临时位置,关闭事务
  3. 使用一些监视临时文件的外部进程,将此文件传输到最终目标,用户可以通过某个Servlet将该文件传递给该文件。

答案 1 :(得分:0)

请参阅http://in.relation.to/Bloggers/PostgreSQLAndBLOBs

是的byteas会很糟糕。 Hibernate有一种方法可以继续使用大型对象,并且可以保留流式界面。