問題タブ [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.

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

java - session.refresh(Object, LockMode.UPGRADE) が休止状態で非推奨になるのはなぜですか?

私の要件:

cronトリガーの目的でQuartz を使用しています。多くのトリガーは同じ行で実行されていますが、異なる列に基づいています。そのため、トリガーが関連する列を更新する必要がある場合。Session.refresh(object)トリガーは、最初にオブジェクトがそれに属する(トリガーの開始時に選択された)オブジェクトをデータベースからrefresh( )してからUPGRADE LOCK、行レベルで取得します。ロックの取得に成功した場合は、列session.update(object)を更新し、DB で更新するために使用します。そしてロックを解除。

session.refresh(Object, LockMode.UPGRADE)hibernate を使用してダーティ アップデートを回避するための代替手段と効率的な方法は何ですか?

hibernate で廃止されるのはなぜですか?

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

hibernate - session.get(...) が org.hibernate.NonUniqueObjectException を解決するのはなぜですか?

エンティティの削除を試みるために Hibernate 4、Struts2 を使用していますが、次の例外がスローされました。

私は読んでいて、問題を理解していると思っていました。実際、例外は非常に説明的です。セッションに同じ識別子を持つ複数のオブジェクトがあり、これは問題でした。これは、Hibernate が特定のサブジェクトでトランザクションを実行し、ある時点で 2 つのオブジェクトからの情報が一致しなくなるためです。休止状態は、「セッションにこの ID のオブジェクトがありますが、私があなたに与えたオブジェクトではありません」と言っていると思います。

私は自分のコードをチェックして問題を理解しましたが、削除しようとする直前にオブジェクトを取得すると問題が解決するという記事を読みました。なぜそれが問題を解決するのか理解できないので、例外の理由を理解していないと思います。

session.get(...) は以前に抽出したオブジェクトを返すと思いますが、よくわかりません。

メソッドは次のとおりです。

行のコメントを外して、Session.get (...) を返すオブジェクトを削除しようとすると、例外は発生しなくなりました。なんで?ありがとう。

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

java - Hibernate - 2 番目のクエリは Unknown service requested を返します

Hibernate がどのように機能するかをよりよく理解しようとしています...

解決できない問題があります。

アプリケーションが起動すると、クエリが作成されます

最後に、現在のセッションを閉じます。

その後、2 番目のクエリを実行する必要があります。

新しいセッションを開きます (最初のセッションはメソッドで閉じられましたHibernateUtil.shutdown();)

しかし、私は今、

理由がわかりません。最初のセッションを閉じてから、新しいセッションを開きました..

クエリごとにセッションを閉じるのは正しいですか

編集 この問題を解決しようとしていますが、結果はありません。

これで、最初の選択クエリができました。これはうまくいきます。アプリケーションの起動時です。

私はそれをコミットしたりフラッシュしたりしません。次に、アプリケーションを起動すると、2 番目のクエリがあるので、getCurrentSession を実行して選択を試みます。

アプリケーションが停止し、何も表示されません。pi4j でログを記録するように休止状態をセットアップできないため、何が起こっているのかわかりません...休止状態セッションの使用方法に何か問題がありますか?

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

java - イベント発生時のヌルポインタ例外

スケジュールされたタイマー イベントが発生したときの例外..... SetEvent を使用すると se = new SetEvent(); se.startArchiveEvent(); 次に、次の例外が発生します....

以下は関連するクラスです

ArchiveEvent.java

SetEvent.java

AbstractDao.java

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

json - Grails 3.1 json レンダリング

アプリケーションを grails 3.0.13 から grails 3.1.1 にアップグレードしました。そうすることで、JSON レンダリングで興味深い問題が発生しました。

カスタム JSON マーシャラーを使用しています。

これを grails 3.1.1 で使用しようとすると、次のエラーが発生します。

そして、予定.リソース?.名前行で発生します。これを回避するさまざまな方法を試し、1 つのユースケースの回避策に成功しましたが、別の場所で同じエラーが発生しています。これをどこでも変更するのは、間違った方法のように思えます。

私のドメイン クラスでは、次のような関係を宣言しました。

リソースと顧客フィールドを熱心にロードする必要があると思いましたか? (私は以前、grails 3.0.14 ユーザー "customer lazy: false" で動作しました。

ただし、現在は機能しません。gorm 5 でのセッションの動作に変更はありましたか? json レンダリングでリレーションを引き続き使用できるようにするには、どうすればよいですか?

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

java - Hibernate、コレクションをロードせずにコレクションを含むオブジェクトを更新する

TaskAssigness のセットを含むタスクのセットを含む列のセットを含むプロジェクトがあります。

一連のタスクをロードせずに列のタイトルを更新しようとしていますが、次のエラーが発生します。

次の hbm.xml があります。

Project.hbm.xml :

Column.hbm.xml :

Task.hbm.xml :

TaskAsignee.hbm.xml :

この方法で列のタイトルを更新しようとしています:

列にタスクが含まれていない場合、これは正常に機能します。タスクを含む列を更新しようとすると、次のエラー メッセージが表示されます。

プロジェクトを更新する前にタスクとタスクの割り当てを取得すると、エラーは発生しません:

コラムのタイトルを変更し、タスクやタスク担当者を取得せずにプロジェクトを更新する方法はありますか? 列を更新するだけで、それ以上進もうとしないように休止状態に伝えることはできますか。

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

java - session.evict(obj) を呼び出す前に休止状態のトランザクションをコミットする必要があります

トランザクションを保存した後、いつ休止状態でトランザクションをコミットする必要がありますか。session.evict(obj) を呼び出す前か後か。現在、私のコードは次のようになっています(必要な部分のみ)。

エビクト後にコミットすると、データがデータベースに保存されないことがあります。それは正しいコーディング方法ですか??

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

hibernate - Session.buildLockRequest() を使用してエンティティを EntityManager に再アタッチすることは実用的な解決策ですか?

私の問題は比較的単純です:

私は常に必要としない多くの遅延ロードされたセットを持つエンティティを持っています。今、私はすべてを熱心にロードしたくはありませんし、いくつかの異なる getSlimEntity()、getFullEntity()、getEntityForSpecialOccasion() メソッドを持ちたくもありません。

私がやりたいのは、デフォルトで「スリム」バージョンを用意してから、レイジーなものをオンデマンドでロードすることです。その要求は、「タスク」エンティティを表示する Web ページのタブを変更することで発生する可能性があります。新しいタブにタスクの履歴が表示されます。ただし、このタブはあまり使用されないため、データを熱心に取得する必要はありません。

データベースのパフォーマンスは私たちにとって問題であるため、解決策はデータベースにできるだけ労力をかけないようにする必要があります。

私が思いついた解決策は、Session.buildLockRequest() を使用してタスクを EntityManager に「再アタッチ」し、必要なセットで Hibernate.initialize() を呼び出すことです。次のようになります。

これはスリムで比較的理解しやすいソリューションであり、データベースは更新されず、問題の HistoryEntries を照会するだけです。

ここで私の質問: このソリューションは使用しても問題ありませんか? 見えない問題はありますか? buildLockRequest を呼び出すと、実際に何が起こっているのでしょうか? また、複数のユーザーが同じタスクを表示すると問題が発生する可能性はありますか?

// 編集: 指摘したように、このソリューションは、EclipseLink や OpenJPA などの他の持続性プロバイダーと互換性がない可能性がある Hibernate 固有の呼び出しを使用します。このプロジェクトは内部専用であるため、問題になることはありません。