Java 显示映射的2个表的结果后,我应该在哪里关闭Hibernate会话对象?
在返回包含所有要显示记录的迭代器之前,我发现代理初始化没有会话错误,这是由于关闭了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
我有两张桌子:
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");