Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA实体的内存处理_Jpa_Memory Management_Spring Data Jpa - Fatal编程技术网

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 = "

我拥有以下JPA实体:

@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
对其进行注释。我也会考虑。最后,您不需要本机查询来选择性地获取实体字段,只需使用或