Gus Heck commented on Bug HHH-5233

I am seeing this using these:

    compile 'org.hibernate:hibernate-entitymanager:4.2.2.Final'
    compile 'org.hibernate:hibernate-c3p0:4.2.2.Final'
    compile 'org.hibernate:hibernate-envers:4.2.2.Final'

As you can see below, the first listed FetchOverride works because the empty comments collection renders as json without error, but then extracts dies. The json below was part of a set of 6 resources returned from the DB, but the exception caused only one to render (and partially at that).

package-info.java
@FetchProfile(name = "eager-resource", fetchOverrides = {
    @FetchProfile.FetchOverride(entity = Resource.class, association = "comments", mode = FetchMode.JOIN),
    @FetchProfile.FetchOverride(entity = Resource.class, association = "extracts", mode = FetchMode.JOIN),
    @FetchProfile.FetchOverride(entity = Resource.class, association = "ratings", mode = FetchMode.JOIN)
})

package com.customer.model;

import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.FetchProfile;
Resource.java
  @OneToMany(mappedBy = "aboutResource")
  private Collection<Comment> comments;

  @OneToMany(mappedBy = "fromResource")
  private Collection<Extract> extracts;

  @OneToMany(mappedBy = "resource")
  private Collection<Rating> ratings;
Stacktrace
com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: com.customer.model.Resource.extracts, could not initialize proxy - no Session (through reference chain: com.customer.servlet.search.CustomerSearchResults["resources"]->com.customer.model.Resource["extracts"])
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:232)
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:197)
	at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:184)
	at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:605)
	at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:142)
	at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:229)
	at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:26)
	at com.fasterxml.jackson.databind.ser.std.ArraySerializerBase.serialize(ArraySerializerBase.java:57)
	at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:569)
	at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:597)
	at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:142)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:118)
	at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:2718)
	at com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2177)
	at com.customer.servlet.search.CustomerStream.close(CustomerStream.java:67)
	at org.mitre.dsmiley.httpproxy.ProxyServlet.closeQuietly(ProxyServlet.java:227)
	at org.mitre.dsmiley.httpproxy.ProxyServlet.copyResponseEntity(ProxyServlet.java:299)
	at org.mitre.dsmiley.httpproxy.ProxyServlet.service(ProxyServlet.java:177)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.customer.servlet.ThreadContextFilter.doFilter(ThreadContextFilter.java:33)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.customer.servlet.search.CustomerSearchFilter.doFilter(CustomerSearchFilter.java:36)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:722)
Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.customer.model.Resource.extracts, could not initialize proxy - no Session
	at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:566)
	at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:186)
	at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:545)
	at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124)
	at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266)
	at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:90)
	at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:23)
	at com.fasterxml.jackson.databind.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:186)
	at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:569)
	at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:597)
	... 37 more
JSON Results
"resources": [
        {
            "id": 3,
            "location": "http://superuser.com/search?q=disable+java+chrome",
            "scheme": "http",
            "server": "superuser.com",
            "port": "80",
            "path": "/search",
            "query": "q=disable+java+chrome",
            "lastVisit": null,
            "created": 1373065910877,
            "modified": 1373065910877,
            "comments": [],
            "extracts": []
        }
    ]
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira