Eclipselink没有缓存导致StackOverflowError

时间:2012-01-19 10:15:12

标签: jpa eclipselink stack-overflow

我有一个包含5行的数据库表。

我第一次选择所有我得到的StackOverflowError

em.createQuery("SELECT e FROM " + clazz.getSimpleName() + " e");

如果我对每一行进行单一选择

em.find(clazz, 1);
em.find(clazz, 2);
em.find(clazz, 3);
em.find(clazz, 4);
em.find(clazz, 5);

然后选择一切完美。我猜这是否与尚未进入缓存的记录有关?

完整堆栈跟踪太长这里是顶部

java.lang.StackOverflowError的     在org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)     at java.lang.ClassLoader.loadClass(Unknown Source)     at java.lang.ClassLoader.loadClassInternal(Unknown Source)     在com.mysql.jdbc.Util.handleNewInstance(Util.java:427)     在com.mysql.jdbc.PreparedStatement.getInstance(PreparedStatement.java:872)     在com.mysql.jdbc.ConnectionImpl.clientPrepareStatement(ConnectionImpl.java:1498)     在com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4270)     在com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4169)     在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1401)     在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1350)     在org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:652)     在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:576)     在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:526)     在org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:529)     在org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:206)     在org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:192)     在org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectOneRow(DatasourceCallQueryMechanism.java:664)     在org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRowFromTable(ExpressionQueryMechanism.java:2582)     在org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRow(ExpressionQueryMechanism.java:2553)     at org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:439)     at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1076)     在org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:740)     在org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1036)     在org.eclipse.persistence.queries.ReadObjectQuery.execute(ReadObjectQuery.java:407)     at org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:2392)     at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1291)     at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1273)     at org.eclipse.persistence.internal.indirection.NoIndirectionPolicy.valueFromQuery(NoIndirectionPolicy.java:309)     at org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRowInternal(ForeignReferenceMapping.java:1850)     at org.eclipse.persistence.mappings.OneToOneMapping.valueFromRowInternal(OneToOneMapping.java:1623)     at org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRow(ForeignReferenceMapping.java:1739)     at org.eclipse.persistence.mappings.DatabaseMapping.readFromRowIntoObject(DatabaseMapping.java:1283)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoObject(ObjectBuilder.java:342)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:717)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:504)     在org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:454)     at org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:723)     at org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:448)     at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1076)     在org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:740)     在org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1036)     在org.eclipse.persistence.queries.ReadObjectQuery.execute(ReadObjectQuery.java:407)     at org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:2392)     at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1291)     at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1273)     at org.eclipse.persistence.internal.indirection.NoIndirectionPolicy.valueFromQuery(NoIndirectionPolicy.java:309)     at org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRowInternal(ForeignReferenceMapping.java:1850)     at org.eclipse.persistence.mappings.OneToOneMapping.valueFromRowInternal(OneToOneMapping.java:1623)     at org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRow(ForeignReferenceMapping.java:1739)     at org.eclipse.persistence.mappings.DatabaseMapping.readFromRowIntoObject(DatabaseMapping.java:1283)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoObject(ObjectBuilder.java:342)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:717)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:504)     在org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:454)     at org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:723)     at org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:448)     at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1076)     在org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:740)     在org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1036)     在org.eclipse.persistence.queries.ReadObjectQuery.execute(ReadObjectQuery.java:407)     at org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:2392)     at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1291)     at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1273)     at org.eclipse.persistence.internal.indirection.NoIndirectionPolicy.valueFromQuery(NoIndirectionPolicy.java:309)     at org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRowInternal(ForeignReferenceMapping.java:1850)     at org.eclipse.persistence.mappings.OneToOneMapping.valueFromRowInternal(OneToOneMapping.java:1623)     at org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRow(ForeignReferenceMapping.java:1739)     at org.eclipse.persistence.mappings.DatabaseMapping.readFromRowIntoObject(DatabaseMapping.java:1283)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoObject(ObjectBuilder.java:342)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:717)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:504)     在org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:454)     at org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:723)     at org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:448)     at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1076)     在org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:740)     在org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1036)     在org.eclipse.persistence.queries.ReadObjectQuery.execute(ReadObjectQuery.java:407)     at org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:2392)     at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1291)     at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1273)     at org.eclipse.persistence.internal.indirection.NoIndirectionPolicy.valueFromQuery(NoIndirectionPolicy.java:309)     at org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRowInternal(ForeignReferenceMapping.java:1850)     at org.eclipse.persistence.mappings.OneToOneMapping.valueFromRowInternal(OneToOneMapping.java:1623)     at org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRow(ForeignReferenceMapping.java:1739)     at org.eclipse.persistence.mappings.DatabaseMapping.readFromRowIntoObject(DatabaseMapping.java:1283)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoObject(ObjectBuilder.java:342)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:717)     at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:504)     在org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:454)     at org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:723)     at org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:448)     at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1076)     在org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:740)

1 个答案:

答案 0 :(得分:5)

我假设您已将缓存类型设置为NONE,并且关系周期不使用LAZY。

不要将缓存类型设置为NONE,这不是禁用共享缓存的方式。如果只是非常特殊的情况,则缓存类型为NONE。

要禁用共享缓存,

<property name="eclipselink.cache.shared.default" value="false"/>

请参阅, http://wiki.eclipse.org/EclipseLink/FAQ/How_to_disable_the_shared_cache%3F