Я пытаюсь обновить таблицу в моем сеансе гибернации, а затем обновить локальную таблицу данных путем повторного получения таблицы гибернации. Если я не делаю обновление, я могу без проблем обновить локальную таблицу данных, но когда я добавляю обновление, я получаю следующую ошибку в журнале сервера:
SEVERE: org.hibernate.SessionException: сессия закрыта!
Может кто-нибудь подсказать, что я делаю неправильно и что я могу сделать, чтобы решить проблему?
Спасибо.
Вот код для обновления. Кажется, он работает правильно, так как я не получаю никаких исключений и получаю возвращаемое значение статистики 1, указывающее, что таблица была обновлена и зафиксирована.
public int updatePolygonGroupAtrributes( long id, String groupName, String color, long ownerId, int updtUserId )
{
int stat = 0;
TbPolygonGroup polyGroup = null;
TbCustAccount custAcct = null;
TbUser user = null;
try
{
org.hibernate.Transaction tx = session.beginTransaction();
polyGroup = (TbPolygonGroup)session.get(TbPolygonGroup.class, id);
polyGroup.setVcPolygonGroup(groupName);
polyGroup.setVcColor(color);
custAcct = (TbCustAccount)session.get(TbCustAccount.class, ownerId);
System.out.println( "<DbHelper.updatePolygonGroupAtrributes> ownerId = "+custAcct.getBiAccountId()+", Name = "+custAcct.getVcCustAccountName() );
polyGroup.setTbCustAccount(custAcct);
polyGroup.setDtUpdTime( new Date() );
user = (TbUser)session.get(TbUser.class, updtUserId);
System.out.println( "<DbHelper.updatePolygonGroupAtrributes> update User Id = "+user.getIuserId()+", Name = "+user.getVcUserFirstName()+" "+user.getVcUserLastName() );
polyGroup.setTbUser(user);
try
{
session.update(polyGroup);
tx.commit();
stat = 1;
}
catch(Exception e)
{
tx.rollback();
e.printStackTrace();
status = e.getMessage();
stat = -1;
}
}
catch( Exception ex )
{
ex.printStackTrace();
status = ex.getMessage();
stat = -1;
}
return stat;
}
Вот код, в котором я называю обновление в моем приложении (не очень актуально, за исключением показа потока моих действий).
public void polyGroupUpdateAction()
{
int changed = 0;
String clr = "#"+polyColor;
long ownId = sb1.getLong( selectedPolyOwner, 0 );
long groupId = selectedPolygonGroup.getBiPolygonGroupId();
int updUserId = sb1.getLoginUserId();
int retVal = dbHelper.updatePolygonGroupAtrributes(groupId, polyName, clr, ownId, updUserId);
if( retVal < 0 )
{
sb1.setMessage( "Error updating Polygon Group: "+dbHelper.getStatus() );
return;
}
System.out.println("---------<DeviceSessionBean.polyGroupUpdateAction> Return value = "+retVal);
sb1.setMessage("Polygon Group has been updated.");
fillPolyGroupList();
return;
}
Вот соответствующий код, где я пополняю свои локальные таблицы (показывает, где происходит ошибка)
public void fillPolyGroupList()
{
System.out.println( "<DeviceSessionBean.fillPolyGroupList> Entering ... ");
tbPolygonGroupList = dbHelper.getPolygonGroup();
System.out.println( "<DeviceSessionBean.fillPolyGroupList> After reloading polygon group list ... ");
polygonGroupDataModel = new PolygonGroupDataModel(tbPolygonGroupList);
}
Вот журнал сеанса, который показывает, что обновление успешно завершено, но выдает ошибку, когда я пытаюсь перечитать таблицу данных в fillPolyGroupList ();
INFO: <DbHelper.updatePolygonGroupAtrributes> ownerId = 74, Name = TransCore - David Kerr
INFO: <DbHelper.updatePolygonGroupAtrributes> update User Id = 2, Name = Transcore System
INFO: ---------<DeviceSessionBean.polyGroupUpdateAction> Return value = 1
INFO: <DeviceSessionBean.fillPolyGroupList> Entering ...
SEVERE: org.hibernate.SessionException: Session is closed!
at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1319)
.....
at java.lang.Thread.run(Thread.java:662)
INFO: <DeviceSessionBean.fillPolyGroupList> After reloading polygon group list ...
WARNING: #{deviceSessionBean.polyGroupUpdateAction}: java.lang.NullPointerException
javax.faces.FacesException: #{deviceSessionBean.polyGroupUpdateAction}: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
....