Hibernate删除outOfMemory

时间:2014-11-12 10:14:51

标签: hibernate

我们在应用程序中使用Hibernate来管理数据库中的事务。当我启动一个java程序来删除数据库中的实体(最多600个实体)时,我有一个OutOfMemory(。该程序在参数中输入要删除的id列表。在删除实体之前,我用它的id进行查找。 / p>

我认为所有实体的内存都会导致OutOfMemory(在自动刷新之前) 我曾想过在每次删除或刷新后添加evict()指令......但不推荐用于性能。

这是堆栈跟踪:

   Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
   at java.util.Arrays.copyOf(Arrays.java:2882)
   at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515)
at java.lang.StringBuffer.append(StringBuffer.java:306)
at java.io.StringWriter.write(StringWriter.java:77)
at oracle.jdbc.driver.ClobAccessor.getString(ClobAccessor.java:239)
at oracle.jdbc.driver.T4CClobAccessor.getString(T4CClobAccessor.java:70)
at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:397)
at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1515)
at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:263)
at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:263)
at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$2.doExtract(VarcharTypeDescriptor.java:61)

1 个答案:

答案 0 :(得分:-1)

这里导致错误的片段:

@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void remove(List<Configuration> listConfiguration){
        for (Configuration configuration : listConfiguration) {
            configuration = findById(configuration);
            configurationDao.remove(configuration);
        }
    }