Я пишу веб-приложение, которое позволяет пользователю получать личную информацию сотрудника и редактировать ее (электронная почта, телефон, имя и т. Д.). При развертывании приложения на сервере, если я пытаюсь отредактировать сотрудника, я иногда получаю сообщение об ошибке «Сессия Hibernate уже закрыта». Мой код для разговора с базой данных через Hibernate ниже:
/*
* File: EmployeeMapper.java
*/
package org.hibernate.employee;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
/**
* This class represents the data mapper for an employee to the
* database.
*/
public class EmployeeMapper {
/**
* Constructs an EmployeeMapper object.
*/
public EmployeeMapper() {
}
/**
* Finds an employee in the database by the username specified.
*
* @param username the username to find
* @return the employee if the username is in the database, null otherwise
*/
public Employee findByUserName(String username) {
Session session = SessionFactoryUtil.getInstance().getCurrentSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Query q = session.createQuery("from Employee e where e.username='"
+ username + "'");
List results = q.list();
for (Object o : results) {
Employee e = (Employee) o;
return e;
}
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
session.close();
}
return null;
}
/**
* Updates the employee in the database by writing it to the database.
*
* @param employee the employee to update in the database
* @throws Exception
*/
public void updateEmployee(Employee employee) {
Session session = SessionFactoryUtil.getInstance().getCurrentSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.update(employee);
session.getTransaction().commit();
} catch(RuntimeException e){
if(tx != null){
tx.rollback();
}
throw e;
} finally {
session.close();
}
}
}
У кого-нибудь есть предложения, что мне делать? Если вам нужно опубликовать другие классы или файлы, чтобы получить больше информации об этой программе, укажите, что вам нужно.