Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 显示映射的2个表的结果后,我应该在哪里关闭Hibernate会话对象?_Java_Hibernate_Jsp - Fatal编程技术网

Java 显示映射的2个表的结果后,我应该在哪里关闭Hibernate会话对象?

Java 显示映射的2个表的结果后,我应该在哪里关闭Hibernate会话对象?,java,hibernate,jsp,Java,Hibernate,Jsp,在返回包含所有要显示记录的迭代器之前,我发现代理初始化没有会话错误,这是由于关闭了Hibernate会话对象造成的 我有两张桌子: Emp { eid int Primary Key, ename String,<br> did int (Foreign Key to Dept table); } Dept { did int, dname String; } show.jsp的代码是: <%@ page import="data.*, business

在返回包含所有要显示记录的迭代器之前,我发现代理初始化没有会话错误,这是由于关闭了Hibernate会话对象造成的
我有两张桌子:

Emp {
  eid int Primary Key,
  ename String,<br>
  did int (Foreign Key to Dept table);
}

Dept {
  did int,
  dname String;
}
show.jsp的代码是:

<%@ page import="data.*, business.*"%>
<%@ page import ="java.util.*" %>

<!DOCTYPE html>
<html>
<head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

     <title>Result Page</title>
</head>
<body>
<center>
     <div id="container">
         <h1>Result Page</h1>

         <table border="2">
             <thead>
                 <tr>
                     <th>Emp ID</th>
                     <th>Emp Name</th>
                     <th>Department</th>
                     <th>Update Record</th>
                 </tr>
             </thead>
             <tbody>
                 <%
                     int eid;
                     String ename, dept; 
                     RegisterEmp loginService = new RegisterEmp();
                     Iterator<Emp> itr = loginService.getListOfUsers();
                     while(itr.hasNext())
                     {
                        Emp e=(Emp)itr.next();
                        Dept d=e.getDept();
                        //out.println("  "+e.getEname()+ "  ");
                        //out.println("  "+d.getDname() + "  ");
                        eid = e.getEid();
                        ename = e.getEname();
                        dept = d.getDname();

                 %>
                 <tr>
                     <td><%=eid%></td>
                     <td><%=ename%></td>
                     <td><%=dept%></td>
                     <td><a href="updateviewform.jsp?id=<%=eid%>&ename=<%=ename%>&dept=<%=dept%>">Update</a></td>
                 </tr>
                 <%}%>
             <tbody>
         </table>    
         <br/>
     </div>
    </center>
</body>
</html>

结果页
结果页
Emp ID
Emp名称
部门
更新记录

由于
show.jsp
将有权访问HttpSession对象,而不是Hibernate会话的对象,因此我不能在这里关闭Hibernate会话对象


那么我在哪里可以关闭它呢?

我仍然会在服务方法中关闭它,以防止出现任何与保持打开的会话有关的问题

只要在会话上下文中急切地获取所需的依赖项:

Query query=s.createQuery("select e from Emp e inner join fetch e.dept");  

您的回答意味着,我应该在createQuery(“来自Emp”)之后立即关闭;但是,当我尝试在show.jsp中显示时,仍然会出现与以前相同的错误。在finally子句中。如果您在会话处于活动状态时获取所有依赖实体,那么就不会有问题。问题是我必须在show.jsp中获取,以便在那里显示它。jsp中不会有会话,也不应该有会话。尝试我的查询,让我们看看我们将从哪里开始我必须添加此查询到哪里?在show.jsp中?对不起,我听不懂你的回答。
Query query=s.createQuery("select e from Emp e inner join fetch e.dept");