2012-03-30 2 views
1

以下の2つのコードを考慮してください。HIbernate/SQLでセッションとリリースのセッションを取得する最善の方法

Session session = null; 
query = "update Employee set EMPLOYEE_NAME = 'Jay' where EMPLOYEE_ID = 1"; 

    try { 
     session = getSession(); 
     Query query = session.createSQLQuery(dlquery); 
     query.executeUpdate(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    finally { 
     if(session != null) { 
      releaseSession(session); 
     } 
    } 

そして....

Session session = getSession(); 
query = "update Employee set EMPLOYEE_NAME = 'Jay' where EMPLOYEE_ID = 1"; 
    try { 
     Query query = session.createSQLQuery(dlquery); 
     query.executeUpdate(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    finally { 
     if(session != null) { 
      releaseSession(session); 
     } 
    } 

2の間で使用することが良いですか?それとも良い方法がありますか?私はここで何をしているのでしょうか?

最後にreleaseSession(session)を呼び出す前にヌルチェックを行う必要がありますか?

答えて

2

本当に、最良の方法は、SpringとそのJPA/Hibernateサポートを活用することです。コード内でこれを処理する必要はありません。

1

正直言って2つの違いはあまりないと思いますが、セッションがnullかどうかを常に確認して、別のNullReferenceExceptionが発生しないようにしてください。

残念ながら、これはおそらくJavaでこれを行う最もクリーンな方法です.C#のように "using"ステートメントがないため、使用ブロックの実行が終了した後にオブジェクトを破棄することができます。

1

私はトランザクションを使用することをお勧めします。明日、別の更新プログラムを追加するようにコードを変更した場合、更新の実行中に何らかの問題が発生した場合の一貫性の問題について心配する必要はありません。それ以外にも、値をハードコーディングするのではなく、クエリでパラメータを使用することをお勧めします。この方法で、クエリを再利用できます。

0

セッションを取得および解放するには、次の構文を使用します。

 session = getSession(); 
     Query query = session.createSQLQuery(dlquery); 
     query.executeUpdate(); 
     session.close(); 
1

getSession()が何らかの理由で例外をスローした場合は、第二の溶液中での問題ではないでしょうか?

関連する問題