問題タブ [open-session-in-view]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
195 参照

hibernate - ロールバックは例外であるべきですか? (具体的には: Web アプリと OSIV を使用)

これはかなり理論的な質問です。

私のサービスクラスでは、何らかの理由で操作が実行できない場合、原因が誤った入力または予期されチェックされたその他の条件であっても、常にロールバックを行う傾向があります。

Open Session in View パターン (OSIV) を使用する Web アプリケーションでは、セッションが閉じられ、後続の遅延読み込み操作が失敗するという厄介な副作用があります。リクエスト中のある時点でエラーが発生した場合にのみ、リクエストの最後にセッションをロールバックするために、醜い配管コードを作成する必要があります。

これは私に考えさせました:何かが本当にうまくいかなかった場合、ロールバックは例外的な手段であるべきですか?条件が満たされない場合、サービスメソッドはデータが書き込まれたり変更されたりしないことを自分で確認する必要がありますか? 入力の検証が成功したが、サービス メソッドが選択された入力が不正であると判断したときに、フロントエンド レイヤーがモデル オブジェクト (フォームなど) を更新する場合の対処方法は? たとえば、Hibernate は、ロールバックが行われない場合、デフォルト設定でこれらの変更を自動的に保持します。

ご意見、アドバイスお待ちしております!

0 投票する
5 に答える
1862 参照

java - OpenSessionInViewFilter で静的リソースを除外する方法

MVC webapp に OpenSessionInViewFilter を実装しましたが、ほぼ完璧に動作します。唯一の問題は、Web サーバーから要求されたすべてのイメージ、js、css などに対してもセッションを作成することです。これは欲しくない。

私はstruts2、spring、およびhibernateを使用しています。これは私のweb.xmlです

したがって、url-pattern /* をマッピングしているため、すべての画像なども取得します。*.jsp と *.action に設定しようとしましたが、lazyloading-exceptions が再び発生します...どうすればよいですか? 私は今5時間答えを探していて、頭が少し頭がおかしくなっています.

私がする必要があるのは、このフィルターをすべての静的リソースを無視することだけです。それでおしまい!そして、それ以外はすべて実行できます。とても簡単に聞こえますが、どうすればいいのかわからなくて本当にイライラします。

どんな助けでも大いに感謝します。

フィルターを拡張して独自のフィルターを作成し、その中で除外する必要がありますか? そしてそうならば。どのように?

編集:フィルターチェーンの上部にある静的ファイルのフィルターマッピングを設定できるようです。そして、それらを「ByPassFilter」に送信して、これらの静的リソースのフィルターチェーンをバイパスします。これは行く方法ですか?

みんなありがとう!

0 投票する
1 に答える
1993 参照

java - Spring3およびHibernate4を使用したOpen-Session-In-Viewでのアノテーション駆動型トランザクションの実装

Wicket-1.5.3、Spring-3.1.1、Hibernate-4.1.1を使用してアプリケーションを開発しています。

実装したい

  • Open-Session-In-Viewパターン
  • トランザクションはアノテーションドリブンになり、
  • アプリケーションは、LazyInitializationExceptionをネットで取得する必要があります。
  • ネストされたモデルのデータベース更新操作は正しく実行する必要があります。

私は別々のレイヤー、ウェブ、データ、サービスなどを持っています。

最初に、web.xmlで定義されているopen-session-in-viewフィルターについて説明します。

applicationContext.xmlには、次の構成があります。

* .hbm.xmlで定義されているデータモデルクラスは、プロキシベースです。

ここで、applicationConextで定義されたクラスについて説明します。

userDao:実際にはUserDaoImplです:

BaseDaoImplは、sessionFactoryの依存性注入が実際に行われる抽象クラスです。

ここで、このクラスについて質問があります。BaseDaoImplをHibernateDaoSupportで拡張した方がよいかどうか疑問に思いました。そうすると、saveメソッドの代替バージョンは次のようになります。

どちらがいいですか?

次に、インターフェイスIBaseDao:

そしてISupportSave:

UserDaoImplはIUserDaoを実装します。これは次のとおりです。

次はサービスレイヤーで、userManagerについて説明している他のクラスの中で、トランザクションです。

BaseManagerImplは、UserManagerImplによって拡張される抽象クラスです。

以下はIBaseManagerです。

そして、IUserManagerは次のとおりです。

私はモデルクラスを与えませんでした。主に、IUserを実装してBaseを拡張するUserがあります。IUserはIBaseを拡張し、BaseはIBaseを実装します。

今、私は上記の設計が正しいかどうか、そしてそれが私の要件を満たすかどうか疑問に思いました。

どんな提案も私に非常に役立ちます。

ありがとう。

0 投票する
2 に答える
16392 参照

spring - ビューでの Hibernate Open Session: リクエストごとのトランザクション?

TomcatでSpringでHibernateを使用しています。私はこのトピックに関するJBoss wiki ページを頻繁に参照し、再読してきましたが、これは役に立ちました。しかし、それは私にいくつかの疑問を残します。

  1. リクエストごとにトランザクションを開始するという考えは、私を悩ませます。フィルターを特定のコントローラーに制限できると思います-おそらく、トランザクションを必要とするすべてのコントローラーを疑似「tx」パスまたは何かの下に置きます。しかし、トランザクションが必要かどうかわからない場合にトランザクションを使用するのは悪い考えではありませんか? また、何らかのリクエストで読み取りを行っているだけの場合 (キャッシュから取得される可能性が非常に高い読み取り)、トランザクションを使用しないほうがよいのではないでしょうか?

  2. サービス層でトランザクションを処理する方法について言及している投稿を読みましたが、Spring でこれを行いたいと考えています。では、フィルタ コードはどのようなものになるでしょうか。遅延読み込みのために、ビューでセッションを利用できるようにしたいです。

  3. フィルタを呼び出すsessionFactory.getCurrentSession()だけでよい場合、再利用のためにセッション ファクトリに「解放」するにはどうすればよいでしょうか。(トランザクションを使用している場合でも、または何かが表示されると予想していましたsession.close()。) そのセッションを再利用できることをセッション ファクトリに伝えているのは誰ですか?

  4. おそらくbeginTransaction()、リクエストの期間中、特定のデータベース接続を特定のセッションにバインドする呼び出しでしょうか? それ以外の場合、セッションは必要に応じてプールからデータベース接続をプルしますよね?

私のすべての質問にご理解いただきありがとうございます。

(そして、あなたの答えが Spring のドキュメントへのリンクである場合、あなたは私を泣かせるだけです。あなたはそれを望まないでしょう? もし人々が Spring 関連の質問に答えるのをやめたら、私は本当のお金を払います。仕方。)

0 投票する
1 に答える
1930 参照

open-session-in-view - リクエストごとのセッションとビューパターンでのセッションを開くの違い

皆さん、 Open Session in ViewSession per requestパターンの違いは何ですか? Spring MVC と Hibernate を使用しています。ここではトランザクション境界については話していません。リクエストごとのセッションは 1 セッション:1 tx のようです。しかし、OSIV の場合、1 つのセッションがあり、複数のトランザクション (サービス呼び出しごとに 1 つ) があります。誰かがこれに光を当てることができますか?

0 投票する
2 に答える
2865 参照

java - 新しいバージョンのHibernateを表示するためにセッションを開く

この非常に人気のあるページを見ると、

だから私の質問は非常に簡単です:最新バージョンのHibernate(4.1+)でこのような動作を実装する方法は?多分それは怠惰な初期化問題のよりエレガントな決定が存在しますか?アドバイスやリンクは大歓迎です。

0 投票する
1 に答える
2119 参照

spring - sessionFactory.getCurrentSession()は、OSIVが構成されているにもかかわらず、異なるセッションを返します

SpringOpenSessionInViewFilterに問題があります。私のweb.xml構成は次のようになります。

そして、私の一般的なDAOは次のようになります。

パブリッククラスBasicDaoImplはBasicDaoを実装します{

SessionFactoryが注入されます)

単一セッション用に構成されていないことは知っていますが(マージの代わりに更新を使用するなど)、最初にLazyInitializationExceptionを取り除きたいと思います。

デバッグからわかることは、各リクエストのsessionFactory.getCurrentSession()が異なるhashCodeでセッションを返すことです。

今、私は何を間違えましたか?

0 投票する
0 に答える
284 参照

nhibernate - OpenSessionInViewがSpring.NET/NHibernateでデフォルトでステートレスセッションのみを使用するようにするにはどうすればよいですか?

私たちのプロジェクトはレガシーデータベースを介してデータをクエリするだけですが、Spring FrameworkがOSIVの状況でセッションを自動注入した場合、デフォルトでステートレスセッションを使用できますか?

つまり、基本クラスNHibernateRepositoryのメソッドGetCurrentSessionは、ステートレスセッションオブジェクトを取得できます。

_sessionFactory.GetCurrentSession()を_sessionFactory.OpenStatelessSession()に変更しても機能しますか?

しかし、私のSpring構成は通常の設定のままになります。

私の場合はどうすればよいですか?ご協力いただきありがとうございます。

0 投票する
1 に答える
582 参照

spring - 冬眠します。jsp で遅延コレクションのサイズを取得する

私は with を使用Spring MVCしてOpenSessionInViewFilter、jsp で遅延コレクション サイズを取得するためのベスト プラクティスを見つけようとしています (コレクションと をロードせずにLazyInitializationException)。解決策はありますか?

0 投票する
2 に答える
420 参照

spring - OpenSessionInView に関する問題

遅延読み込み用に Spring/Hibernate の OpenSessionInView パターンを実装しました。「No Sessoon」または「2 つ以上のセッション」の問題に直面しています。手順が不足している場合はお知らせください。

詳細コードの一部を次に示します。

Web.XML

applicationContext.xml

顧客.xhtml

XHTML ユーザー インターフェイスには、顧客コードを示すオートコンプリート ボックスがあります。オートコンプリート クエリは CompleteCustomer メソッドを使用しますが、getCustomerbyCode はコンバーター Bean によって呼び出されます。

顧客コードを選択すると、選択した顧客の詳細が画面に表示されます。アプリケーション ユーザーは、DB に変更を加えて更新を保存することができます。

CustomerBean.java

CustomerServiceImpl.java

CustomerMasterDAO.java

テーブル定義は .hbm.xml ファイルに保存されます。

セッションを取得するために、次のステートメントを配置する多くの組み合わせを試しました: session = getSessionFactory().getCurrentSession(); セッション セッション = SessionFactoryUtils.getSession(sessionFactory, Boolean.FALSE);

また、異なる方法および異なる場所での取引。No Session のエラー メッセージが表示されるか、2 つ以上のセッションが接続されているというエラー メッセージが表示されます。

私のコードの何が問題なのか教えてください。

よろしく、

シリッシュ