java - 如何使用 JPA 将大型 Blob 从数据库流式传输到应用程序?

标签 java hibernate spring-mvc oracle11g jpa-2.2

我有一个 JPA 实体类,它包含一个像这样的 blob 字段:

@Entity
public class Report {
    private Long id;
    private byte[] content;

    @Id
    @Column(name = "report_id")
    @SequenceGenerator(name = "REPORT_ID_GENERATOR", sequenceName = "report_sequence_id", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "REPORT_ID_GENERATOR")
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    @Lob
    @Column(name = "content")
    public byte[] getContent() {
        return content;
    }

    public void setContent(byte[] content) {
        this.content = content;
    }
}

并且我在数据库中的记录中插入了一些大数据(超过 3 个演出)(使用 DBMS 过程)。应用程序用户应该能够下载这些记录的内容,所以我实现了一种方法获取到客户端浏览器的结果。
问题是,由于 JPQL 选择查询倾向于首先从 DB 中获取整个对象,然后将其提供给应用程序,因此每当我尝试使用 JPA 访问此记录时,我都无法分配足够的内存异常。

我已经看到使用 JDBC 连接尝试从数据库流式传输数据的一些解决方案,但我找不到任何 JPA 特定的解决方案。

有没有人知道我应该如何解决这个问题?

最佳答案

这是一个迟到的答案,但对于那些仍在寻找解决方案的人来说,我发现了 Thorben Janssen 关于 Java 思想的一篇好文章。缺点是它是特定于 Hibernate 的,但您似乎还是会使用它。
基本上解决方案是在您的实体中使用 java.sql.Blob 数据类型属性

@Entity
public class Book {

    @Id
    @GeneratedValue
    private Long id;

    private String title;

    @Lob
    private Clob content;

    @Lob
    private Blob cover;

    ...
}

然后你使用 Hibernate 的 BlobProxy,它提供了一个 OutputStream。但是看看文章here

关于java - 如何使用 JPA 将大型 Blob 从数据库流式传输到应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57268541/

相关文章:

Java HttpSession

java - JMX 客户端只能在本地访问

java - 如何使 BoxLayout 正确左对齐?

java - Hibernate ManyToMany 和父类(super class)映射问题

java - JPA服务层事务

java - 获取 View 中 Spring Controller 和方法的名称

java - Eclipse 在启动时不断更改文件名

java - Springframework.dao.InvalidDataAccessResourceUsageException hibernate .SQLGrammarException MySQLSyntaxErrorException

Spring REST - RestTemplate 可以使用多部分/混合吗?

java - spring Rest api Controller 的缓存响应