JPA实体的内存处理
我拥有以下JPA实体:JPA实体的内存处理,jpa,memory-management,spring-data-jpa,Jpa,Memory Management,Spring Data Jpa,我拥有以下JPA实体: @Entity public class ABC implements Serializable { /** * */ private static final long serialVersionUID = 1L; @Id @Column(name = "\"Key\"") private String key; @Column(name = "
@Entity
public class ABC implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@Column(name = "\"Key\"")
private String key;
@Column(name = "\"Field1\"")
private String field1;
@Column(name = "\"Field2\"")
private String field2;
@Column(name = "\"Data\"", length = 2147483647)
private String data;
public ABC() {
// default constructor
}
实体中的数据
字段映射到数据库中的一个BLOB,我们在其中存储交易数据,我们也提供这些数据用于下载目的
我们在SpringDataJPA中实现了一些查询,以从数据库中选择数据。前
@Query("SELECT t FROM ABC f WHERE t.key IN :keys")
ArrayList<ABC> findByKeys(@Param("keys") Set<String> keys);
@Query(“从ABC f中选择t,其中t.key IN:keys”)
ArrayList findByKeys(@Param(“keys”)设置键);
在某些情况下,当我们最终从数据库中选择一个大数据集时,会遇到数据接收失败[java.io.IOException:java.lang.OutOfMemoryError:Direct buffer memory]
。在大多数情况下,数据
字段在数据库中为空。我的问题是,保存ArrayList
值的变量的内存是如何处理的?它是否为列表中的数据字段保留内存
基于此,我们需要考虑是否只需要通过本机查询从数据库中选择所需的字段,但这样我们就必须拥有自己的映射器,并且我们还将失去与JPA优雅处理的其他实体的关联。首先,如果数据
是LOB
,您应该使用@Lob
对其进行注释。我也会考虑。最后,您不需要本机查询来选择性地获取实体字段,只需使用或