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]

Reply via email to