問題タブ [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 でイベント リスナー内をクエリするためのベスト プラクティス
監査機能を実行するための FlushEventListener があります。いくつかのエンティティを更新している間、hibernate はフラッシュする直前に監査コードをコールバックします。監査コードは、データベースにクエリを実行する必要があります。
同じセッションでそれを行おうとすると、明らかにセッションの状態が台無しになります。NaturalIdXrefDelegate という名前のクラス内で NaturalIds を検証しているある時点で、hibernate 内から NullPointerException を取得します。
現在、監査クエリの新しいセッションを開くことで解決しています。これの問題は、getCurrentSession (hibernate によって管理されるリクエスト全体のセッション) の利点を失っていることです。このようにして、クエリごとに 1 つのセッションを開くことに戻ります。
これに対する洗練された解決策はありますか、それとも基本的に getCurrentSession を再実装して、リクエストで独自のセッション #2 を管理する必要がありますか?
hibernate-entitymanager - @NaturalId はルートエンティティ (またはその @MappedSuperclasses) でのみ有効で、結合された複数のテーブル継承で Natural Id を使用します
基本的に、ルート例外「@NaturalId only valid on root entity (またはその @MappedSuperclasses)」を検索タブに貼り付けるだけで、Googleで同様の問題を見つけることができません。結合された複数テーブルの継承戦略を使用して、抽象的な親( Person )を含む具象/子エンティティ( Student、Employee ) をデータベース内の 3 つのテーブルにマップしていますが、これまでのところ問題はありませんでした。 Student のStudentIdを使用して、私の Student Entity のカスタム クエリを実装する必要があります。. 基になる Hibernate-session を Entity-manager から抽出することに成功し、最愛の HibernateSession から必要なメソッドを明確に確認して使用できるようになりました (Hibernate には (byId、byNaturalId などの) naturalIds のメソッドがあることは誰もが知っています)。 )、これらの種類のメソッドは、エンティティのクエリに非常に役立ちます。そのため、studentId データ メンバーに@NaturalIdでアノテーションを付けるまで..何らかの操作 (保存/作成) を実行すると、複数行の例外がスローされます。そして根本的な原因は..
追加情報としてエンティティのコードを貼り付けます
Parent抽象基本クラス
人物クラス
Entityサブクラス
学生クラス
質問: さまざまな学生エンティティに対して一意のクエリを作成するためにできることはありますか? Hibernate の naturalId メソッドは、get や update などのエンティティを操作するのに非常に便利だからです。
エンティティとデータベース テーブルを使用して設計を犠牲にすることなく、目的を達成するための回避策はありますか? 可能であれば、studentId を naturalId として機能させたいと考えています。提案/ヘルプ/コメントをお願いします。どんなことでも大歓迎です。
java - session.replicate() メソッドを使用する場合
hibernate documentation:に従ってsession.replicate()
、機能の使用方法とユースケースに関する小さな例があります:
セクション 11.9。2 つの異なるデータストア間でオブジェクトを複製しています:
この機能のユースケースには、異なるデータベース インスタンスに入力されたデータの調整、製品アップグレード中のシステム構成情報のアップグレード、非 ACID トランザクション中に行われた変更のロールバックなどがあります。
以下の場合にどのように役立つかを理解するのを手伝ってもらえますか:
- 製品アップグレード時のシステム構成情報のアップグレード
- 非 ACID トランザクション中に行われた変更のロールバックなど。
java - System.out.println() が Hibernate セッションを解決できるのはなぜですか?
こんにちは、休止状態フレームワークの学習初心者です。エラーは解決しましたが、何が問題なのかわかりません。私のプロジェクトでは、2 つのテーブルTblbarang
とTbljenis
. そして の 1 つのフィールドはTblbarang
によって外部キーとして関係がありましたTbljenis
。
Tblbarang
テーブルを更新したい。私は2つの方法を持っていました
Tblbarang
テーブルアイテムを設定するために選択するモデルコンボボックスを設定するこのメソッド。
そして今、私のテーブルTblbarangを更新するこの方法
System.out.print()
エラーなしの場合は次のとおりです
私は単純に私のコードをこのようにします
しかし、同じエラーを示す例外。私のコードで何が起こるか知りたいですか? 誰でもその問題を説明できるか、これは休止状態のバグです、ありがとう
java - org.hibernate.service.UnknownServiceException: 不明なサービスが要求されました
AbstractHibernateRepository 保存メソッドの単体テストを作成しています。私は春のテストランナーを使用していますが、実行時に次の例外が発生します:
私のテスト:
リポジトリ:
春の設定:
この問題の原因は何ですか?どうすれば修正できますか?
spring - 春のトランザクションネストされたオープンセッション?
サービスのメソッドがネストされた伝播でマークさ@Transactional
れ、その中に他のメソッドへの呼び出しが多数ある場合@Transactional
、これらのメソッドのそれぞれが独自のセッションを使用しますか? たった1つのメソッド呼び出しでdbへの多くの接続を表す必要がありますか?
hibernate - Hibernate のネストされたトランザクション / セッションおよびプロキシ アソシエーション
サーバー側で常に開いているトランザクションが存在するように、トランザクションを処理するために hibernate 4 と spring-aop を使用しています。
ネストされたトランザクションを作成して分離して動作させたいのですが、次のエラーが表示されます: プロキシを 2 つの開いているセッションに関連付ける試みが不正です。以下の例を参照してください。
永続化されたエンティティ e1 からのデータで作成され、ネストされたトランザクションに保存されたエンティティ e2。E1 には、完全に初期化されていないディープ グラフがあります。
例外をスローせずに e2 を作成する正しい方法は何でしょうか?
スキームの例:
コード例:
[https://github.com/cemartins/test-cases]で詳細なテスト ケースを含む Maven プロジェクト。
spring - hibernate 4 でデータベースに保存した後にデータが取得されない
Spring 4 で Hibernate 4 を使用しています。独自のセッション ファクトリを作成し、Hibernate Transaction Manager を使用しました。保存後にデータを取得する際に問題が発生しました。ProcedureCall を使用してデータを保存しています。すべてのメソッドで、セッションを開いてセッションを閉じています。何が問題ですか?session.close() を削除すると、正常に動作します。
java - Hibernate クエリ時間は、2 つの異なる Hibernate セッションで大きく異なります (2 番目のレベルのキャッシュが有効になっていない場合)。
休止状態のクエリでデータ取得時間のパフォーマンスを測定しようとしています。このため :-
a.) 2 つの異なるセッションを開き、両方のセッションで同じ Hibernate クエリを使用しました。
b.) Session1 内での所要時間は 162 ミリ秒であり、Session2 でのデータのフェッチ中の所要時間は 24 ミリ秒です。
このクエリ実行時間の違いはなぜですか? 論理的な理解によると、毎回(異なるセッションで)新しいクエリがヒットします...したがって、クエリの実行時間も似ているはずです。???
注:- このテスト プログラムでは、2 次キャッシュは有効になっていません。
セッション セッション = HibernateUtil.getSessionFactory().openSession(); VendorDaoImpl vendorDao = new VendorDaoImpl();
以下は結果です:-
Hibernate: vendordeta0_.id を id0_0_ として、vendordeta0_.banned_zip_pattern をbanned2_0_0_ として、vendordeta0_.code を code0_0_ として、vendordeta0_.company_name を company4_0_0_ として、vendordeta0_.created を created0_0_ として、vendordeta0_.cst_number を cst6_0_0_ として、vendordeta0_.default_page を default7_0_00_ として選択します。 , vendordeta0_.max_invoice_number as max9_0_0_, vendordeta0_.name as name0_0_, vendordeta0_.next_invoice_number_reset_date as next11_0_0_, vendordeta0_.print_mock_invoice as print12_0_0_, vendordeta0_.special_panel_access as special13_0_0_, vendordeta0_.starting_invoice_number as starting14_0_0_, vendordeta0_.tin_number as tin15_0_0_, vendordeta0_.updated as updated0_0_, vendordeta0_ .version as version0_0_ from test.vendor_detail vendordeta0_ where vendordeta0_.code=?
セッション 1 で DB からフェッチする時間: 162
Hibernate: vendordeta0_.id を id0_0_ として、vendordeta0_.banned_zip_pattern をbanned2_0_0_ として、vendordeta0_.code を code0_0_ として、vendordeta0_.company_name を company4_0_0_ として、vendordeta0_.created を created0_0_ として、vendordeta0_.cst_number を cst6_0_0_ として、vendordeta0_.default_page を default7_0_00_ として選択します。 , vendordeta0_.max_invoice_number as max9_0_0_, vendordeta0_.name as name0_0_, vendordeta0_.next_invoice_number_reset_date as next11_0_0_, vendordeta0_.print_mock_invoice as print12_0_0_, vendordeta0_.special_panel_access as special13_0_0_, vendordeta0_.starting_invoice_number as starting14_0_0_, vendordeta0_.tin_number as tin15_0_0_, vendordeta0_.updated as updated0_0_, vendordeta0_ .version as version0_0_ from test.vendor_detail vendordeta0_ where vendordeta0_.code=?
セッション 2 で DB からフェッチする時間: 24
どんな助けでも大歓迎です!
java - java.lang.ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery - Hibernate エラー
上記の例外は、休止状態のセッション ファクトリの作成中にスローされています。
アプリケーションの lib フォルダーには、hibernate-jpa-2.1-api と javax.persistence.2.1.0 があります。両方の jar で NamedStoredProcedureQuery クラスを確認できます。しかし、classnotfoundexception の実行時エラーが発生しています。なにか提案を?