問題タブ [hibernate-session]
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.
java - Hibernate + Spring: 遅延ロードされたコレクションをフィルタリングできません
Spring と Hibernate を使用して、エンティティのソフト削除ロジックを実装しています。このロジックを実行するには、@Filter Hibernate アノテーションを使用します。しかし、解決できない問題があります。遅延ロードされたコレクションのオブジェクトがフィルタリングされていません。
コードは非常に単純です。
したがって、ロジックは「Orderオブジェクトを開いたときに、削除されたOrderItemが表示されない」ということです。これは、Session オブジェクトを返す DAO のメソッドです。セッション ファクトリは、Spring の org.springframework.orm.hibernate4.LocalSessionFactoryBean です。
したがって、このメソッドは、 List of Orderをリクエストしたときにのみ明示的に呼び出されます。しかし興味深いのは、私のorderItems Listの PersistenceSet にnullの Session があるように見えることです (何も取得していないため、奇妙なことですLazyInitializationException
)。そのため、フィルター「deletedOrderItemFilter」はorderItems
リストに適用されません。
もちろん、私はそれをグーグルで検索しましたが、注文のリストを取得したトランザクションが閉じられるとすぐに、セッションも閉じられることがわかりました。しかし、それでも私は解決策を見つけることができません。新しい一時セッションを PersistenceSet に明示的に割り当てようとしましたが (フェッチするとき)、まだ運がありません (ただし、セッション ファクトリのフィルター リストにフィルターが含まれているようです)。
どんな助けでも大歓迎です。
UPDATE OK私はそれを「汚い」方法で解決できます:
OrderItem
Removable
次のようなメソッドを使用して独自のインターフェイスを実装しますisRemoved
- getterでは、
orderItems
共通のフィルタリング メソッドを呼び出して、アイテムを繰り返し処理し、それらをフィルタリングします。欠点は、すべてのオブジェクト (削除されたものとそうでないもの) をデータベースからロードする必要があることです。
更新LazyInitializationException
sessionFactory Spring Bean 構成プロパティのため、
何も取得していません。
だから私は推測します:トランザクションなし - セッションなし - フィルタは適用されません。
hibernate - サービス層でのトランザクション
とマークされたサービスがあります@Transactional
。唯一の問題は、save メソッドを呼び出すときにオブジェクトをコミットする必要があるメソッドに取り組んでいることです。
クラス レベルから注釈を削除し、私のものを除く各メソッドを@Transactional
(DAO も とマークされています@Transactional
) としてマークしました。情報が希望どおりにすぐに保存されていることがわかりますが、findBy を実行しようとすると、「スレッド内にセッションが存在しません」という例外が発生します。
この問題とその修正方法を知っている人はいますか?
hibernate - Hibernate セッションを閉じてもテーブルのロックが解除されない - Hibernate、Derby
エンティティを保存しようとしています
このメソッドは、Spring トランザクション コンテキストから呼び出されます
トランザクションが開始され、問題なくコミットされますが、問題は、Hibernate セッションが閉じられた後も作成されたロックが解放されず、そのテーブルからデータを選択するときに問題が発生することです。
Spring 4.0.1.、Hibernate 4、Derby 10.10.1.1 を使用しています。
Hibernate セッションを閉じるとロックが解除されますか? それはどのように機能していますか?春のトランザクションコンテキストの問題ですか?
java - Hibernate セッションのプラクティス
アプリケーションがデータベースからの構成を使用するタスクに取り組んでいます。構成は Java 永続オブジェクトに格納されています。サーバーの起動時に Hibernate セッションが作成され、すべての構成データが遅延読み込みオプションを使用してオブジェクトに読み込まれます。同時ユーザー要求によって同じオブジェクトが使用されます。
構成データの構造:
ワークフロー:
為に。例えば。person person は休止状態のエンティティです。(Java 永続オブジェクト)
person オブジェクトは、サーバーの起動時に hibernate get list 呼び出しでロードされます。1 つのセッション ファクトリとセッションのみが初期化されます。DAO には get 呼び出ししかありません。
後続のサーバー要求では、person オブジェクトにアクセスしてそのプロパティを取得します。
一般に、このセットアップが複数の並列サーバー要求に対してどのように機能するかはわかりません。
1) セッションを長時間開いたままにする。それは何か問題を引き起こしますか?2)それは良い習慣ですか?各 CRUD 操作の後にセッションを閉じる必要があることを理解しています。しかし、特に上記のワークフローの場合、正しいアプローチは何ですか。3) 複数のサーバー要求が同じ永続エンティティにアクセスできますか? (着信のみ)
ガイドとヘルプを探しています。デザインとパフォーマンスに関連するすべてのインプット。
java - Hibernate : session.get(...) 対 session.getNamedQuery(...)
トランザクションプロセスでオブジェクトを作成/保存し、トランザクションの最後にオブジェクトを再度読み取ります(履歴イベントを設定する前)
ダオ
私が使用するときsession.getNamedQuery(...)
。オブジェクトacteurの値は常にnullです。アクターをセッションに保存する前に呼び出されたメソッドcreerActeur(Integer pkDeclaration, Acteur acteur)
ですが、データベースに保持しません。実際、アクターはトランザクションの最後にのみ永続化されます。
セッションからオブジェクトを取得すると、問題は解決しますsession.get(Acteur.class, pkActeur)
。私は望むようにオブジェクトacteurを手に入れました。
私の質問は次のとおりです。クエリ「Declaration_Acteur_Complet」を実行すると、(DB で) オブジェクト アクターが表示されないのはなぜですか? 複数のトランザクションが関係していますか? session.get(...)
とはどう違いsession.getNamedQuery(...)
ますか?
助けてくれてありがとう。