小编Ice*_*low的帖子

如何使用Hibernate将数据流式传输到数据库BLOB(在byte []中没有内存存储)

我正在寻找一种方法将二进制数据流入/流出数据库.如果可能的话,我希望用Hibernate完成(以数据库无关的方式).我发现的所有解决方案都涉及将二进制数据显式或隐式加载到内存中,如byte [].我需要避免它.假设我希望我的代码能够从数据库(存储在BLOB列中)向本地文件写入2GB视频,或者相反,使用不超过256Mb的内存.它显然是可以实现的,并且不涉及伏都教.但是我找不到办法,现在我正试图避免调试Hibernate.

让我们看一下示例代码(记住-Jmx = 256Mb).

实体类:

public class SimpleBean {
    private Long id;
    private Blob data;
    // ... skipping getters, setters and constructors.
}
Run Code Online (Sandbox Code Playgroud)

Hibernate映射片段:

<class name="SimpleBean" table="SIMPLE_BEANS">
    <id name="id" column="SIMPLE_BEAN_ID">
        <generator class="increment" />
    </id>
    <property name="data" type="blob" column="DATA" />
</class>
Run Code Online (Sandbox Code Playgroud)

测试代码片段:

Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                                      .applySettings(cfg.getProperties())
                                      .buildServiceRegistry();

SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
session.beginTransaction();

File dataFile = new File("movie_1gb.avi");
long dataSize = dataFile.length();
InputStream dataStream = new FileInputStream(dataFile);

LobHelper lobHelper = …
Run Code Online (Sandbox Code Playgroud)

java database hibernate blob stream

7
推荐指数
1
解决办法
3万
查看次数

标签 统计

blob ×1

database ×1

hibernate ×1

java ×1

stream ×1