セッション:アプリケーションとデータベースのセッション、冬眠操作の中心、および持続層操作の基礎です。オブジェクト/トランザクション管理/データベースアクセスのライフサイクルは、セッションに密接に関連しています。
セッションオブジェクトは、SessionFactoryを介して構築されます。 Hibernateによるセッションを取得する2つの方法を紹介する例を以下に示します。
ログは、プログラミングにおいて非常に一般的な懸念事項です。ユーザーがデータベースで動作する場合、データベースのダイナミクスを追跡するためにこの一連の操作を記録する必要があります。したがって、ユーザーがデータベースにレコードを挿入すると、ログファイルにレコードを記録する必要があります。ユーザーの一連の操作はセッションで実行する必要があります。そうしないと、これが2つのスレッドになります。同期の保証はありません。次のコードを見てください
Hibernateutil管理セッションツール
パッケージcom.bjpowernode.usermgr.util; import org.hibernate.session; // hibernate3のImport org.hibernate.sessionfactory; Import org.hibernate.cfg.configuration; public class hibernateutils {private static sessionfactory fectory; static {try try {// read {// read edcfg cfg = new configuration()。configure(); // sessionfactory factory = cfg.buildsessionfactory();} catch(expect e){e.printstacktrace();}} //オープンセッションパブリックセッションgetsession(){return factory.opensession();} session){if(session!= null){if(session.isopen()){session.close();}}} public static sessionfactory getSessionFactory(){return factory;}}}}ユーザービジネスロジックレイヤー
パッケージcom.bjpowernode.usermgr.manager; import java.util.date; import org.hibernate.session; import com.bjpowernode.usermgr.domain.log; import com.bjpowernode.usermgr.domain.user; import com.bjpowernode.usermgr.usermgr.utilnate usermantims; UserManager {/** *ユーザーの追加とログの追加の両方が同じセッションを使用するため、ユーザーを追加すると、ログも失敗します。トランザクションロールバック*ユーザーは成功ログを追加し、成功を追加します*/public void adduser(ユーザーユーザー){セッションセッション= null; try {//現在のスレッドセッションセッション= hibernateutils.getSessionFactory()。 log ") e){e.printstacktrace(); session.getTransaction()。rollback();}}}}ログ実装クラス:
パッケージcom.bjpowernode.usermgr.manager; import org.hibernate.session; Import com.bjpowernode.usermgr.domain.log; import com.bjpowernode.usermgr.util.hibernateutils; public class logmanagerimpl Impmanager hibernateutils.getSessionFactory()。getCurrentsession()。save(log);}}}
テストクラス
パッケージcom.bjpowernode.usermgr.manager; import junit.framework.testcase; Import com.bjpowernode.usermgr.domain.user; public class usermanagerimpltestはtestcaseを拡張します{public void testadduser(){usermanager usermanager = usermanimpluser.setName( "Zhang San"); usermanager.adduser(user); }
知らせ:
1. OpensessionとGetCurrentsessionの違いは何ですか?
*オープンセッションは閉じている必要があり、トランザクションが完了した後、容器は自動的に閉鎖されます。
*オープンセッションは現在のスレッドにバインドされておらず、電流は現在のスレッドにバインドされます
2. Currentsessionを使用する場合、hibernate.cfg.xmlファイルで構成する必要があります。
*ローカルトランザクションの場合(JDBCトランザクション)
<propertyName = "hibernate.current_session_context_class">スレッド</property>
*グローバルトランザクション(JTAトランザクション)の場合
<propertyName = "hibernate.current_session_context_class"> jta </property>
グローバルトランザクション:複数のデータベースとプロセスにまたがる可能性のあるエクスプローラーによって管理および調整されたトランザクション。リソースマネージャーは通常、XA 2段階の提出プロトコルを使用して、「エンタープライズ情報システム」(EIS)またはデータベースと対話します。
ローカルトランザクション:単一のEISまたはデータベースにローカルで、単一のプロセスに制限されています。ローカルトランザクションには、複数のデータソースが含まれません。
要約します
上記は、Hibernateでのセッションを取得する2つのコード例に関するこの記事の内容全体です。私はそれが誰にでも役立つことを願っています。興味のある友達は引き続き参照できます:
セッションを追加、削除、改訂、検索のインスタンスの分析
Hibernateでのセッションについてすぐに学びます
Hibernateはhbm.xmlを使用して、マッピング関係分析を構成します
欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!