【发布时间】:2013-11-23 08:50:31
【问题描述】:
您好,我想在休眠状态下从输入流创建一个 blob,但我不知道流的长度。
Hibernate.getLobCreator(sessionFactory.getCurrentSession()).createBlob(stream, length)
如何在不知道流长度的情况下创建 blob?
编辑1
在旧的休眠版本中是可能的
http://viralpatel.net/blogs/tutorial-save-get-blob-object-spring-3-mvc-hibernate/
Blob blob = Hibernate.createBlob(file.getInputStream());
EDIT2
好的,但它有一个错误的实现
return new SerializableBlob(new BlobImpl(stream, stream.available()));
stream.available 不是实际大小
编辑 3
我试过了
session.doWork(new Work() {
@Override
public void execute(Connection conn) throws SQLException {
LargeObjectManager lobj = ((org.postgresql.PGConnection) conn).getLargeObjectAPI();
但 conn 只是来自 c3p0 的 NewProxyConnection。
【问题讨论】:
-
加载它一个数组,用 ByteInputStream 包装数组并使用数组的长度作为第二个参数。
-
我只是将其更改为流,因为我想处理大量数据而不将其读取到内存中
-
将大量数据作为 blob 保存在数据库中真的是最好的方法吗?将它们保存到文件然后将文件路径保存在数据库中不是更容易更快吗?
-
这是另一个问题 ;) ...不是我的...但是复制代表了这种方法
-
您始终可以使用普通 Hibernate 保存记录,但将 blob 列保留为 NULL,然后使用低级 JDBC 设置 blob 列。作为一种解决方法,不应该出现其他任何东西(我个人认为这是适合设计的实际解决方案,而不是解决方法)。 docs.oracle.com/javase/tutorial/jdbc/basics/blob.html
标签: java hibernate stream blob