I don't want to change Listing to be non-abstract, but I did try querying a concrete subclass and that doesn't suffer from the same defect. So that raises/reiterates a few questions
1) Can't you, via HQL, query an interface or abstract class entity with the goal of getting a collection of all objects in a class hierarchy, where the actual instantiated types are correctly resolved by hibernate? 2) Why in the world does this work if I query one specific entity - even subsequent requests for the same one - until I query a different one at which point it is permanently broken? 3) Even though I'm not having this in my page class where I need all of the varying subclass entity instances in a single collection, should I be worried? I imagine the answer to #1 will answer this. I haven't verified that this happens in a non-T5 context, but I'll test that later and share my findings. chris Jonathan Barker wrote: > Be paranoid. Set hibernate.show_sql=true. Grab the SQL statement, and > execute it manually. > > Also, can you change Listing to be non-abstract - even if you never use it? > > > > >> -----Original Message----- >> From: Chris Lewis [mailto:[EMAIL PROTECTED] >> Sent: Thursday, July 24, 2008 15:41 >> To: Tapestry users >> Subject: Re: T5.0.14-SNAPSHOT: strange behavior Dispatcher when using a >> Session >> >> I haven't looked at the source of hibernate (or read) to see what >> exactly goes on, but the erratic behavior of load() is precisely the >> same as this: >> >> Listing listing = (Listing)session.createQuery("from Listing >> where id=:id") >> .setLong("id", Long.parseLong(sListingId)).uniqueResult(); >> >> I just replaced the load() call with this, so now the source is: >> >> public class BinaryFileDispatcher implements Dispatcher { >> >> private Session session; >> >> public BinaryFileDispatcher(Session session) { >> this.session = session; >> } >> >> public boolean dispatch(Request request, Response response) >> throws IOException { >> >> String sListingId = request.getParameter("limg"); >> if(sListingId== null) >> return false; >> >> System.out.println("BinaryFileDispatcher.dispatch() -- " + >> sListingId); >> >> Listing listing = (Listing)session.createQuery("from Listing >> where id=:id") >> .setLong("id", Long.parseLong(sListingId)).uniqueResult(); >> >> response.setHeader("Content-Type", "text/html"); >> >> String test = "<html><body><h1>" + listing.getTitle() + >> "</h1></body></html>"; >> response.setContentLength(test.length()); >> PrintWriter writer = response.getPrintWriter("text/html"); >> writer.append(test).flush(); >> return true; >> } >> >> } >> >> >> Quick summary of the behavior with the following urls: >> >> 1) request /LStAug/?limg=1 >> works >> >> 2) request /LStAug/?limg=1 (again) >> works >> >> 3) request /LStAug/?limg=2 >> breaks >> >> 4) request /LStAug/?limg=1 >> breaks, where it worked before >> >> (restart container) >> >> 1) request /LStAug/?limg=2 >> works >> >> 2) request /LStAug/?limg=1 >> breaks >> >> 3) request /LStAug/?limg=2 >> breaks >> >> so strange. >> >> >> Jonathan Barker wrote: >> >>> I'm not sure why it WORKED. >>> >>> Session.load will try to create an instance of Listing, which it can't >>> because it is abstract. >>> >>> On the other hand, if you do a query, then even though you ask for a >>> Listing, Hibernate will look for any descendant of Listing. >>> >>> The actual object type returned will depend on the actual type for any >>> instance found. You can then cast to Listing without a problem. >>> >>> Get rid of load(). >>> >>> Jonathan >>> >>> >>> >>>> -----Original Message----- >>>> From: Chris Lewis [mailto:[EMAIL PROTECTED] >>>> Sent: Thursday, July 24, 2008 14:37 >>>> To: Tapestry users >>>> Subject: Re: T5.0.14-SNAPSHOT: strange behavior Dispatcher when using a >>>> Session >>>> >>>> Hi Jonathan, >>>> >>>> Here is my dispatcher. As you can see it's in a very early stage so >>>> >> it's >> >>>> both small and messy. The query is being done via: >>>> session.load(Listing.class, Long.parseLong(sListingId)); >>>> >>>> It was being done via createQuery and uniqueResult, with the same >>>> >> results. >> >>>> public class BinaryFileDispatcher implements Dispatcher { >>>> >>>> private Session session; >>>> >>>> public BinaryFileDispatcher(Session session) { >>>> this.session = session; >>>> } >>>> >>>> public boolean dispatch(Request request, Response response) >>>> throws IOException { >>>> >>>> String sListingId = request.getParameter("limg"); >>>> if(sListingId== null) >>>> return false; >>>> >>>> System.out.println("BinaryFileDispatcher.dispatch() -- >>>> >> " >> >>>> + sListingId); >>>> Listing listing = (Listing)session.load(Listing.class, >>>> Long.parseLong(sListingId)); >>>> >>>> response.setHeader("Content-Type", "text/html"); >>>> >>>> String test = "<html><body><h1>" + listing.getTitle() + >>>> "</h1></body></html>"; >>>> response.setContentLength(test.length()); >>>> >>>> >> response.getPrintWriter("text/html").append(test).flush(); >> >>>> return true; >>>> } >>>> >>>> } >>>> >>>> >>>> Jonathan Barker wrote: >>>> >>>> >>>>> Post your query and load code. >>>>> >>>>> >>>>> >>>>> >>>>>> -----Original Message----- >>>>>> From: Chris Lewis [mailto:[EMAIL PROTECTED] >>>>>> Sent: Thursday, July 24, 2008 13:16 >>>>>> To: Tapestry users >>>>>> Subject: Re: T5.0.14-SNAPSHOT: strange behavior Dispatcher when using >>>>>> >> a >> >>>>>> Session >>>>>> >>>>>> It can't be a data issue. The records are persisted via hibernate and >>>>>> work consistently as expected in pages. Like I said, I query the same >>>>>> table to which the abstract class is mapped in my index page with no >>>>>> problem at all. I also said that it works in the dispatcher for the >>>>>> first entity I query, but any subsequent query to a _different_ >>>>>> >> entity >> >>>>>> throws that exception. The query is also just a read (select). Any >>>>>> >>>>>> >>>> other >>>> >>>> >>>>>> ideas? >>>>>> >>>>>> thanks >>>>>> >>>>>> Yunhua Sang wrote: >>>>>> >>>>>> >>>>>> >>>>>>> It sounds more like a data issue, check your data in database >>>>>>> >>>>>>> >>>> carefully. >>>> >>>> >>>>>>> Yunhua >>>>>>> >>>>>>> On Wed, Jul 23, 2008 at 11:18 PM, Chris Lewis >>>>>>> >>>>>>> >>>>>>> >>>>>> <[EMAIL PROTECTED]> wrote: >>>>>> >>>>>> >>>>>> >>>>>>>> Hello, >>>>>>>> >>>>>>>> I have a dispatcher that uses a hibernate session. The dispatcher >>>>>>>> >> is >> >>>>>>>> auto bound and receives the session in the constructor. I'm using >>>>>>>> tapestry-hibernate so that session instance is a proxy that gets >>>>>>>> >> the >> >>>>>>>> real session for the current thread (right?). Now in testing my >>>>>>>> dispatcher, I give it a url like: >>>>>>>> >>>>>>>> /MyContext/?limg=2 >>>>>>>> >>>>>>>> The dispatcher looks for "limg" and if found, queries the session >>>>>>>> assuming that its value is the PK of a mapped entity. When I >>>>>>>> >> trigger >> >>>>>>>> >>>>>> the >>>>>> >>>>>> >>>>>> >>>>>>>> dispatcher for the first time it works fine. If I refresh the page, >>>>>>>> fine. If I change the value to something else, say 3, then it >>>>>>>> >> breaks >> >>>>>>>> with a org.hibernate.InstantiationException: >>>>>>>> >>>>>>>> Cannot instantiate abstract class or interface: >>>>>>>> >>>>>>>> >>>>>>>> >>>>>> com.mypackage.data.Listing >>>>>> >>>>>> >>>>>> >>>>>>>> If I change the value back to 2, the same thing happens! "Listing" >>>>>>>> >> is >> >>>>>>>> >>>>>> an >>>>>> >>>>>> >>>>>> >>>>>>>> abstract class mapped as a super class entity via: >>>>>>>> >>>>>>>> @Entity >>>>>>>> @Inheritance(strategy = InheritanceType.JOINED) >>>>>>>> >>>>>>>> Any clue what's going on here? Two things are perplexing me: >>>>>>>> >>>>>>>> 1) Querying mapped super classes is legal, and I in fact the same >>>>>>>> >>>>>>>> >>>> thing >>>> >>>> >>>>>>>> on my Index page with no problem. >>>>>>>> 2) The query works the first time, but as soon as the id changes it >>>>>>>> >>>>>>>> >>>> is >>>> >>>> >>>>>>>> forever broken until I restart the container. >>>>>>>> >>>>>>>> Thanks in advance! >>>>>>>> >>>>>>>> chris >>>>>>>> >>>>>>>> -- >>>>>>>> http://thegodcode.net >>>>>>>> >>>>>>>> >>>>>>>> ------------------------------------------------------------------- >>>>>>>> >> -- >> >>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> -------------------------------------------------------------------- >>>>>>> >> - >> >>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> -- >>>>>> http://thegodcode.net >>>>>> >>>>>> >>>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>>> >>>>> >>>>> >>>>> >>>>> >>>> -- >>>> http://thegodcode.net >>>> >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >>> >>> >> -- >> http://thegodcode.net >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- http://thegodcode.net