here's another example without any collections ...
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping schema="db_iQ.dbo">
<class name="com.qas.newmedia.intranet.iq.dto.admin.Node"
table="tbl_NavigationTree">
<id name="id" type="int" column="node_id" unsaved-value="0">
<generator class="identity" />
</id>
<property name="parentId" type="int" column="parent_node_id" not-null="true" />
<property name="groupOrder" type="int" column="group_order" not-null="true" />
<property name="path" column="path" not-null="false" />
<property name="title" column="title" not-null="false" />
<property name="titleFull" column="title_full" not-null="true" />
<property name="narrative" column="narrative" not-null="false" />
<property name="viewType" column="view_type" not-null="false" />
<property name="viewOverride" column="view_override" not-null="false" />
<property name="viewRedirect" column="view_redirect" not-null="false" />
<property name="viewRedirectUseNewWindow" column="view_redirect_use_new_win" not-null="false" />
<property name="viewRedirectParams" column="view_redirect_params" not-null="false" />
<property name="viewContent" column="view_content" not-null="false" />
<property name="publishingDisabled" column="publishing_disabled" not-null="false" />
<property name="checkinAdditional" column="checkin_additional" not-null="false" />
<property name="importSearch" column="import_search" not-null="false" />
<property name="maskResults" column="mask_results" not-null="false" />
<property name="customSearchFilter" column="custom_search_filter" not-null="false" />
<property name="customSearchFilterDefaults" column="custom_search_filter_defaults" not-null="false" />
<property name="validateTemplate" column="validate_template" not-null="false" />
<property name="neverExpireControl" column="never_expire_control" not-null="false" />
<property name="roleMask" column="role_mask" not-null="false" />
<property name="resultsFormat" column="results_format" not-null="false" />
<property name="navigationOrderOverride" column="nav_order_override" not-null="false" />
<property name="allowEmail" column="allow_email" not-null="false" />
<property name="vqlSearch" column="vql_search" not-null="false" />
<property name="searchPath" column="search_path" not-null="false" />
</class>
</hibernate-mapping>
CALL
====
[code]
public Node load(Integer id) throws AdminException {
Node node = null;
try {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
node = (Node) session.load(Node.class, id);
tx.commit();
HibernateUtil.closeSession(session);
} catch (HibernateException hE) {
throw new AdminException(hE.getMessage());
}
return node;
}
[code]
So, by now, I've called the Node object out and back into my Servlet, no Session is kept live. Then I do in the servlet
node.setNumSiblings(admin.countChildren(node.getParentId()) - 1);
which calls another Hibernate method
[code]
public int countChildren(int parentId) throws AdminException {
int numSiblings = 0;
try {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
numSiblings = ((Integer) session.createQuery(
"select count(*) from Node as node where " +
"parent_node_id = " + parentId).iterate().next()).intValue();
tx.commit();
HibernateUtil.closeSession(session);
} catch (HibernateException hE) {
throw new AdminException(hE.getMessage());
}
return numSiblings;
}
[/code]
And it is here that the exception occurs ...
[code]
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:53)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:80)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:133)
at com.qas.newmedia.intranet.iq.dto.admin.Node$$EnhancerByCGLIB$$91c24149.getParentId(<generated>)
at com.qas.newmedia.intranet.iq.actions.admin.LoadNodeAction.doWork(LoadNodeAction.java:33)
at com.qas.newmedia.intranet.iq.actions.admin.AdminBaseAction.execute(AdminBaseAction.java:20)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1158)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.qas.newmedia.common.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:65)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:526)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:305)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:383)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:745)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:868)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
[/code][/code]