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

M-S*_*ley 5 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在数据库中的记录中插入了一些大数据(超过 3 个演出)(使用 DBMS 过程)。

应用程序用户应该能够下载这些记录的内容,因此我实现了一种将获取的结果流式传输到客户端浏览器的方法。

问题是,由于 JPQL 选择查询倾向于首先从 DB 获取整个对象,然后将其提供给应用程序,因此每当我尝试使用 JPA 访问此记录时,我都无法分配足够的内存异常

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

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

Tej*_*rde 1

由于您使用关系数据库,将大型(千兆字节)数据文件作为 BLOB 存储在数据库中并不是一个好的做法。相反,常见的做法是数据本身以文件的形式存储在服务器(可能是 FTP)上,而元数据(文件的路径以及服务器等)存储在数据库列中。在这种情况下,将这些数据传输到客户端变得更加容易。

  • 服务器上的文件不是事务性的。如果您不想使用 BLOB 并且您的数据库是 Oracle,则可以使用 BFILE。 (2认同)