エラー時にカスタム例外をスローするためにhibernateを使用する次のコードがあります。また、この場合、クライアントマシンで受信されない限り例外がキャッチされないため、セッションを閉じたいと思います。
public <T> T get(final Session session, final String queryName) throws RemoteException
{
final Query query = // query using given session ...
try
{
return (T) query.uniqueResult();
}
catch (final HibernateException e)
{
SessionManager.logger.log(Level.SEVERE, "Could not retrieve Data", e);
this.closeSession(session);
throw new RemoteException("Could not retrieve Data");
}
}
これで、セッションを閉じて特定の例外をスローするヘルパーメソッドができました。
public void closeSessionAndThrow(final Session session, final RemoteException remoteException)
throws RemoteException
{
this.closeSession(session);
throw remoteException;
}
今、私は上記のコードを使用して単純化できると思いました:
public <T> T get(final Session session, final String queryName) throws RemoteException
{
final Query query = // query using given session ...
try
{
return (T) query.uniqueResult();
}
catch (final HibernateException e)
{
SessionManager.logger.log(Level.SEVERE, "Could not retrieve Data", e);
this.closeSessionAndThrow(session, new RemoteException("Could not retrieve Data"));
}
}
ここreturn null;
で、キャッチの後にステートメントを追加する必要があります。なんで?