gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:11:01 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com