我收到以下异常
[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)
每当为特定条目运行以下方法时:
public Person getPerson(String id) {
Criteria criteria = this.getSession().createCriteria(Person.class);
criteria.add(Restrictions.eq("id", id));
Person p = (Person) criteria.uniqueResult();
return p;
}
增加内存似乎没有帮助,只是挂起。
关于如何解决此问题的任何想法?加载其他Person实体不会导致该问题。
一些可能有用的信息:
<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>
请帮助。
答案 0 :(得分:0)
简而言之,我通过延迟加载解决了这个问题。
我的Person实体引用了几个集合,这些集合确实在急切地获取。我所有收藏中的以下注释都为我解决了这个问题:
@ElementCollection(fetch = FetchType.LAZY)
现在看来显而易见;我很惊讶,因为我已经运行了我的应用程序很长一段时间,定期加载Person实体,之前从未遇到过这个问题。