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