org.hibernate.exception.GenericJDBCException: 无法执行结果的顺序读取(向前)

huangapple go评论104阅读模式
英文:

org.hibernate.exception.GenericJDBCException: could not perform sequential read of results (forward)

问题

以下是翻译好的部分:

我正在使用 Hibernate 版本 - 5.4.12.Final 和 mysql-connector-java 驱动版本 - 8.0.18。 <br>
我的实体:<br>

  1. @Entity
  2. public class Author {
  3. @Id
  4. private long id;
  5. @OneToMany(mappedBy = "author", fetch = FetchType.LAZY)
  6. private Set<Post> posts = new HashSet<>();
  7. // 获取器和设置器...
  8. }
  9. @Entity
  10. public class Post {
  11. @Id
  12. private long id;
  13. @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
  14. @JoinColumn(name = "author_id")
  15. private Author author;
  16. @OneToMany(mappedBy = "post", fetch = FetchType.LAZY, cascade = {CascadeType.REMOVE, CascadeType.REFRESH, CascadeType.DETACH}, orphanRemoval = true)
  17. private List<PostComment> postComments = new ArrayList<>();
  18. // 获取器和设置器...
  19. }
  20. @Entity
  21. public class PostComment {
  22. @Id
  23. private long id;
  24. @ManyToOne(fetch = FetchType.LAZY)
  25. @JoinColumn(name = "post_id")
  26. private Post post;
  27. // 获取器和设置器...
  28. }

当我运行这个 JPQL 查询时:<br>

  1. SELECT post FROM Post post
  2. LEFT JOIN FETCH post.author author
  3. LEFT JOIN FETCH post.postComments postComments
  4. WHERE author.id = :authorId

然后出现了这个错误:

  1. org.hibernate.exception.GenericJDBCException: could not perform sequential read of results (forward)
  2. ...

但是当我运行以下查询时,就没有错误:

  1. SELECT post FROM Post post
  2. LEFT JOIN FETCH post.author author
  3. LEFT JOIN post.postComments postComments
  4. WHERE author.id = :authorId

问题:<br>
为什么我不能使用 FETCH JOIN?<br>
为什么会出现这个错误?<br>
如何修复这个问题?<br>

英文:

I am using Hibernate version - 5.4.12.Final and mysql-connector-java driver version - 8.0.18. <br>
My entities:<br>

  1. @Entity
  2. public class Author {
  3. @Id
  4. private long id;
  5. @OneToMany(mappedBy = &quot;author&quot;, fetch = FetchType.LAZY)
  6. private Set&lt;Post&gt; posts = new HashSet&lt;&gt;();
  7. //Getters and setters...
  8. }
  9. @Entity
  10. public class Post {
  11. @Id
  12. private long id;
  13. @ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
  14. @JoinColumn(name = &quot;author_id&quot;)
  15. private Author author;
  16. @OneToMany(mappedBy = &quot;post&quot;, fetch = FetchType.LAZY, cascade = {CascadeType.REMOVE, CascadeType.REFRESH, CascadeType.DETACH}, orphanRemoval = true)
  17. private List&lt;PostComment&gt; postComments = new ArrayList&lt;&gt;();
  18. //Getters and setters...
  19. }
  20. @Entity
  21. public class PostComment {
  22. @Id
  23. private long id;
  24. @ManyToOne(fetch = FetchType.LAZY)
  25. @JoinColumn(name = &quot;post_id&quot;)
  26. private Post post;
  27. //Getters and setters...
  28. }

When I run this JPQL query:<br>

  1. SELECT post FROM Post post
  2. LEFT JOIN FETCH post.author author
  3. LEFT JOIN FETCH post.postComments postComments
  4. WHERE author.id = :authorId

Then this error appears:

  1. org.hibernate.exception.GenericJDBCException: could not perform sequential read of results (forward)
  2. at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
  3. at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
  4. at org.hibernate.loader.Loader.loadSequentialRowsForward(Loader.java:544)
  5. at org.hibernate.internal.FetchingScrollableResultsImpl.next(FetchingScrollableResultsImpl.java:71)
  6. at org.hibernate.query.internal.ScrollableResultsIterator.hasNext(ScrollableResultsIterator.java:33)
  7. at java.base/java.util.Iterator.forEachRemaining(Iterator.java:132)
  8. at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
  9. at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
  10. at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
  11. at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
  12. at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
  13. at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
  14. at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
  15. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
  16. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
  17. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
  18. at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
  19. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  20. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  21. at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  22. at java.base/java.lang.reflect.Method.invoke(Method.java:566)
  23. at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
  24. at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
  25. at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
  26. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
  27. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
  28. at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
  29. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
  30. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
  31. at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
  32. at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
  33. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
  34. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
  35. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
  36. at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62)
  37. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
  38. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
  39. at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
  40. at no.vergemal.service.aop.ExecutionTimeAspect.logExecutionTime(ExecutionTimeAspect.java:37)
  41. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  42. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  43. at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  44. at java.base/java.lang.reflect.Method.invoke(Method.java:566)
  45. at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
  46. at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
  47. at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
  48. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
  49. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
  50. at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:56)
  51. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
  52. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
  53. at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367)
  54. at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
  55. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
  56. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
  57. at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
  58. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  59. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  60. at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  61. at java.base/java.lang.reflect.Method.invoke(Method.java:566)
  62. at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
  63. at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
  64. at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
  65. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
  66. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
  67. at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
  68. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
  69. at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
  70. at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
  71. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  72. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  73. at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  74. at java.base/java.lang.reflect.Method.invoke(Method.java:566)
  75. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
  76. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
  77. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
  78. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
  79. at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
  80. at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
  81. at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
  82. at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
  83. at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
  84. at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
  85. at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
  86. at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
  87. at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
  88. at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
  89. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
  90. at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
  91. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
  92. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
  93. at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
  94. at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
  95. at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
  96. at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
  97. at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
  98. at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
  99. Caused by: java.sql.SQLException: Before start of result set
  100. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
  101. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
  102. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
  103. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
  104. at com.mysql.cj.jdbc.result.ResultSetImpl.checkRowPos(ResultSetImpl.java:484)
  105. at com.mysql.cj.jdbc.result.ResultSetImpl.getObject(ResultSetImpl.java:1288)
  106. at com.mysql.cj.jdbc.result.ResultSetImpl.getLong(ResultSetImpl.java:812)
  107. at com.mysql.cj.jdbc.result.ResultSetImpl.getLong(ResultSetImpl.java:818)
  108. at org.apache.commons.dbcp2.DelegatingResultSet.getLong(DelegatingResultSet.java:653)
  109. at org.apache.commons.dbcp2.DelegatingResultSet.getLong(DelegatingResultSet.java:653)
  110. at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$2.doExtract(BigIntTypeDescriptor.java:63)
  111. at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
  112. at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)
  113. at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
  114. at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:243)
  115. at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1512)
  116. at org.hibernate.loader.Loader.loadSequentialRowsForward(Loader.java:533)
  117. ... 112 more

But when I run this query then there is no errors:

  1. SELECT post FROM Post post
  2. LEFT JOIN FETCH post.author author
  3. LEFT JOIN post.postComments postComments
  4. WHERE author.id = :authorId

Questions:<br>
Why am I not able to use FETCH JOIN?<br>
Why does this error appear here?<br>
How can I fix it?<br>

答案1

得分: 0

问题出在流式结果集上。为了修复它,需要将这段代码替换为:

  1. return new HashSet<>(query.getResultList());
英文:

The problem was in streaming result set. In order to fix it need to replace this code:

  1. return query.getResultStream().collect(Collectors.toSet());

with such code:

  1. return new HashSet&lt;&gt;(query.getResultList());

huangapple
  • 本文由 发表于 2020年8月22日 18:33:36
  • 转载请务必保留本文链接:https://go.coder-hub.com/63535148.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定