[解決済み] エンティティマネージャを使用している場合、セッションオブジェクトを取得する方法は?
2022-05-18 05:35:43
質問
私は
private EntityManager em;
public List getAll(DetachedCriteria detachedCriteria) {
return detachedCriteria.getExecutableCriteria("....").list();
}
entitymanagerを使用している場合、どのようにセッションを取得できますか?またはどのように私の離脱条件から結果を取得できますか?
どのように解決するのですか?
完全に網羅すると、JPA 1.0の実装を使用している場合とJPA 2.0の実装を使用している場合では、状況が異なります。
JPA 1.0
JPA 1.0を使うと、JPA1.0では
EntityManager#getDelegate()
. しかし、覚えておいてほしいのは
このメソッドの結果は実装に依存します。
つまり、Hibernateを使用するアプリケーションサーバーから他のサーバーへの移植性はありません。例えば
をJBossで使用する場合
を使用する場合、次のようになります。
org.hibernate.Session session = (Session) manager.getDelegate();
しかし GlassFishと を、しなければならないでしょう。
org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();
そうですね、それはひどいですね、ここは仕様が悪い(明確でない)ですね。
JPA 2.0
JPA 2.0では、新しい(そしてはるかに優れた)
EntityManager#unwrap(Class<T>)
より優先されるメソッド
EntityManager#getDelegate()
新しいアプリケーションのために。
そのため、JPA 2.0実装としてのHibernateでは( 3.15. HibernateのネイティブAPI )をするのでしょう。
Session session = entityManager.unwrap(Session.class);
関連
-
Eclipse問題 アクセス制限。タイプ 'SunJCE' が API でないことを解決し、/jdk ディレクトリにある /jre と jre の違いについて理解を深める。
-
Javaジェネリックを1つの記事で
-
ecplise プロンプトが表示されます。"選択したものは起動できません。" "最近の起動はありません。"
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] Javaで現在のスタックトレースを取得するにはどうすればよいですか?
-
[解決済み] Hibernateの「オブジェクトは保存されていないトランジェントインスタンスを参照しています - フラッシュする前にトランジェントインスタンスを保存してください」エラーの修正方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン