私はSpringMVC、AJAX / JSON、Hibernateを使用して、MySQLデータベースからすべての人を取得しています。私は自分のサービスを検証するためにJUnit統合テストを作成しましたが、すべて問題ありません。
今、私はそれをこの種と呼んでいます:
@RequestMapping(value="/allpersons", method=RequestMethod.GET)
public @ResponseBody Set<Person> getAllPersons() {
Set<Person> persons= new PersonServiceImpl().getAllPersons();
return persons;
}
デバッグしました。とのライン
return persons;
すべて順調。すべての人が入ったHashSetがあります。より多くのステップをデバッグすると、次の行に到達します。
this.objectMapper.writeValue(jsonGenerator, o);
の
org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
次に、ソースコードが表示されませんが、デバッガーから次のように通知されます。
StdSerializerProvider._serializeValue(JsonGenerator, Object) line 297
この行の後、次のエラーが発生します。
エラー:org.hibernate.LazyInitializationException-ロールのコレクションを遅延初期化できませんでした:com.mydomain.project.dom.Person.projects、セッションまたはセッションが閉じられていません
org.hibernate.LazyInitializationException:ロールのコレクションを遅延初期化できませんでした:com.mydomain.project.dom.Person.projects、セッションまたはセッションが閉じられていません
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)で
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)で
org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:368)で
org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)で
org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:186)で
org.codehaus.jackson.map.ser.ContainerSerializers $ CollectionSerializer.serializeContents(ContainerSerializers.java:339)で
org.codehaus.jackson.map.ser.ContainerSerializers $ CollectionSerializer.serializeContents(ContainerSerializers.java:314)で
org.codehaus.jackson.map.ser.ContainerSerializers $ AsArraySerializer.serialize(ContainerSerializers.java:112)で
org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268)で
org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:160)で
org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:131)で
org.codehaus.jackson.map.ser.ContainerSerializers $ CollectionSerializer.serializeContents(ContainerSerializers.java:363)で
org.codehaus.jackson.map.ser.ContainerSerializers $ CollectionSerializer.serializeContents(ContainerSerializers.java:314)で
org.codehaus.jackson.map.ser.ContainerSerializers $ AsArraySerializer.serialize(ContainerSerializers.java:112)で
org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:297)で
org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:224)で
org.codehaus.jackson.map.ObjectMapper.writeValue(ObjectMapper.java:1030)で
org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.writeInternal(MappingJacksonHttpMessageConverter.java:153)で
org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:181)で
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter $ ServletHandlerMethodInvoker.writeWithMessageConverters(AnnotationMethodHandlerAdapter.java:975)で
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter $ ServletHandlerMethodInvoker.handleResponseBody(AnnotationMethodHandlerAdapter.java:933)で
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter $ ServletHandlerMethodInvoker.getModelAndView(AnnotationMethodHandlerAdapter.java:882)で
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:428)で
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)で
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)で
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)で
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)で
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)で
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)で
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)で
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)で
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)で
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)で
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)で
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)で
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)で
org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195)で
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159)で
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)で
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)で
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417)で
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)で
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)で
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)で
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)で
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)で
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)で
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)で
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)で
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)で
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)で
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)で
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)で
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)で
org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)で
org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)で
java.lang.Thread.run(Thread.java:619)で
それはシリアル化/JacksonMappingと関係があるようです。それは、人の関連するプロジェクトを取得したいのですが、それは必要ではなく、通常は怠惰にロードされます。
ここでの問題は何ですか?
よろしくお願いします。