gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:45:29 25 4
gpt4 key购买 nike

我有proxy initialisation-no session error我发现这是由于在返回包含所有要显示的记录的迭代器之前关闭 Hibernate session 对象所致。
我有 2 张 table :

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

Dept {
did int,
dname String;
}

我创建了POJO使用 Netbeans 逆向工程向导的类。现在我有 show.jsp,它显示记录并有一个 RegisterEmp.java,其中包含一个方法 public Iterator<Emp> getListOfUsers()获取所有此类记录,并将其显示在 show.jsp 上。

方法如下:

   public Iterator<Emp> getListOfUsers(){
List<Emp> list = null;
Iterator<Emp> listIterator = null;
try {
sf = DbUtil.getSf(); //getting SessionFactory obj from DbUtil class
s = sf.openSession(); //s is a session object
Query query=s.createQuery("from Emp");
list=query.list();
listIterator=list.iterator();
} catch (Exception e) {
System.out.println(e);
} finally {
//s.close(); //I figured this is giving me proxy initialisation- no session error
}
return listIterator;
}

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>

show.jsp将有权访问 HttpSession 对象而不是 Hibernate Session 的对象,我也无法在此处关闭 Hibernate session 对象。

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

最佳答案

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

只需在 session 上下文中急切地获取所需的依赖项即可:

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

关于java - 显示映射的 2 个表的结果后,我应该在哪里关闭 Hibernate session 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43753519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com