Reading through the Hibernate manual it indicated that by specifying
fetch="join" the
related table would be retrieved in the same select statement. I
tried this but got the
same "session is closed" result. It also said that you could
specify lazy="false" and it
would retrieve everything at once, however it immediately recommends
you don't do
this for lots of good reasons (I did try some but they didn't seem
to work, maybe I put
them in the wrong place).
How does the filter modify this process for you? It doesn't sound
like it has solved the
problem.
The filter opens a single session as early as possible in the servlet
request, and closes it as late as possible; this lets you write most
of your code trusting that there is a current session which relates
to recently retrieved objects. Google for "Open Session In View" and
you'll find lots and lots of writeups about this pattern.
Regarding Martin's question, the filter should be mapped to whatever
your Struts actions are mapped (as in the conventional *.do) if you
want your Struts actions and the views to which they forward to take
advantage of the filter.
I've been using Hibernate for a little while and have adopted the
Open Session in View pattern for the application I'm currently
developing. There are definitely a few things you need to get used
to, so it is worth doing a decent amount of reading. In fact, I
would say that while you can do a good amount with Hibernate without
much study, there is much careful thought behind the framework and
you will use it much better if you learn the reasoning behind some of
the implementation decisions. (Hibernate in Action, written by
Hibernate founder Gavin King, is a very fine book; one of the most
usefully theoretical technical books I've read in a long time.)
If you have a relatively simple object model, you can do just fine
without "Open Session In View" -- just make sure that all your
associations are marked as non-lazy or explicitly indicate the Fetch
Mode in queries when you know that the associations will be followed,
or use Hibernate.initialize(...) to make sure that the initialization
happens (remember that it is not recursive, so you need to apply it
to each lazy collection, and you must do it before the opening
session has been closed, or you must use session.lock(...) to
reattach your detached persistent objects before trying to traverse
lazy associations. (If this all sounds like gibberish, read
Hibernate in Action!)
Joe
--
Joe Germuska
[EMAIL PROTECTED]
http://blog.germuska.com
"Narrow minds are weapons made for mass destruction" -The Ex
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]