从MySQL db获取时引发TransactionSystemException | java.lang.OutOfMemoryError:java堆空间
我得到以下异常从MySQL db获取时引发TransactionSystemException | java.lang.OutOfMemoryError:java堆空间,java,spring,hibernate,spring-boot,Java,Spring,Hibernate,Spring Boot,我得到以下异常 [2017-05-22 22:02:43.930] boot - 8169 ERROR [http-nio-8080-exec-1] --- TransactionInterceptor: Application exception overridden by rollback exception java.lang.OutOfMemoryError: Java heap space at com.mysql.jdbc.Buffer.<init>(B
[2017-05-22 22:02:43.930] boot - 8169 ERROR [http-nio-8080-exec-1] --- TransactionInterceptor: Application exception overridden by rollback exception
java.lang.OutOfMemoryError: Java heap space
at com.mysql.jdbc.Buffer.<init>(Buffer.java:54)
at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1972)
at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:3285)
at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:463)
at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:3009)
at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2257)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2650)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1901)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2002)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2066)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1863)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839)
at org.hibernate.loader.Loader.doQuery(Loader.java:910)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355)
at org.hibernate.loader.Loader.doList(Loader.java:2554)
at org.hibernate.loader.Loader.doList(Loader.java:2540)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370)
at org.hibernate.loader.Loader.list(Loader.java:2365)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1718)
at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380)
at org.hibernate.internal.CriteriaImpl.uniqueResult(CriteriaImpl.java:402)
增加内存似乎没有帮助,它只是挂起
有没有办法解决这个问题?加载其他人实体不会导致该问题
一些可能有用的信息:
<springframework.version>4.2.1.RELEASE</springframework.version>
<hibernate.version>4.3.11.Final</hibernate.version>
<mysql.connector.version>5.1.36</mysql.connector.version>
4.2.1.1版本
4.3.11.4最终版本
5.1.36
请帮忙。简而言之,我通过延迟加载解决了这个问题 MyPerson实体引用了几个集合,这些集合确实是被急切地获取的。我所有收藏中的以下注释为我解决了这个问题:
@ElementCollection(fetch = FetchType.LAZY)
现在似乎很明显;我很惊讶,因为我已经运行我的应用程序很长一段时间了,定期加载个人实体,以前从未遇到过这个问题。简而言之,我通过延迟加载解决了这个问题 MyPerson实体引用了几个集合,这些集合确实是被急切地获取的。我所有收藏中的以下注释为我解决了这个问题:
@ElementCollection(fetch = FetchType.LAZY)
现在似乎很明显;我很惊讶,因为我已经运行我的应用程序很长一段时间了,定期加载个人实体,以前从未遇到过这个问题。你能发布实体吗?是否有可能存在一个循环,例如,对另一个人的急切引用,而另一个人又反过来引用了这个人?@StanislavL确实有其他实体被急切地获取。抓取它们懒散地解决了问题。你能发布实体吗?是否有可能存在一个循环,例如,对另一个人的急切引用,而另一个人又反过来引用了这个人?@StanislavL确实有其他实体被急切地获取。懒散地抓到他们解决了这个问题。