問題タブ [jpa]

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 投票する
15 に答える
76232 参照

java - JPA/EJB3 永続コンテキストからエンティティを切り離す

EntityManager を通じて取得した特定の JPA エンティティ Bean をデタッチする最も簡単な方法は何でしょうか。または、最初に分離されたオブジェクトを返すクエリを作成して、それらが本質的に「読み取り専用」として機能するようにすることはできますか?

私がこれをしたい理由は、Bean 内のデータを変更したいからです - 私のアプリケーションでのみ使用しますが、データベースに永続化することはありません。私のプログラムでは、最終的に EntityManager で flush() を呼び出す必要があります。これにより、接続されたエンティティから基になるデータベースへのすべての変更が保持されますが、特定のオブジェクトを除外したいと考えています。

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

java - JBoss 4.2 で JPA を使用して Hibernate の二次キャッシュを有効にする

Java Persistence API (注釈付きエンティティ) を使用する場合、Hibernate の二次キャッシュを有効にするために必要な手順は何ですか? 動作していることを確認するにはどうすればよいですか? JBoss 4.2.2.GA を使用しています。

Hibernate のドキュメントから、次のように、キャッシュを有効にしてpersistence.xmlでキャッシュ プロバイダーを指定する必要があるようです。

他に何が必要ですか?JPA エンティティに@Cacheアノテーションを追加する必要がありますか?

キャッシュが機能しているかどうかを確認するにはどうすればよいですか? Query の実行後にキャッシュ統計にアクセスしようとしましたが、Statistics.getSecondLevelCacheStatisticsは null を返します。おそらく、どの「リージョン」名を使用すればよいかわからないためです。

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

java - JPA/Toplink を使用したバッチ挿入

HTTP インターフェイスを介してメッセージを受信する Web アプリケーションがあります。

このリクエストには、送信者の ID、受信者の ID、およびメッセージのテキストが含まれています。

このメッセージは次のように処理する必要があります。

  • ソースと宛先の両方に一致する User オブジェクトをデータベースから検索する
  • オブジェクトのツリーの作成: メッセージ テキスト用のフィールドと、ソースと宛先用の 2 つの User オブジェクトを含む Message
  • このツリーをデータベースに永続化します。

ツリーは、私が触れることができない他のアプリケーションによって読み込まれます。

Oracle をバッキング データベースとして使用し、JPA と Toplink をデータベース処理タスクに使用しています。可能であれば、私はこれらにとどまります。

多くの最適化を行わなくても、私の環境では最大 30 リクエスト/秒のスループットを達成できます。それほど多くはありません。1 秒あたり約 300 リクエストが必要です。そのため、パフォーマンスのボトルネックがどこにあるかを測定したところ、呼び出しにem.persist()ほとんどの時間がかかっていることがわかりました。その行を単にコメントアウトすると、スループットは 1000 リクエスト/秒をはるかに超えます。

簡単な JDBC 呼び出しを使用して同じデータベースに 100 万のメッセージを永続化する小さなテスト アプリケーションを作成しようとしました。バッチ処理を使用しました。つまり、100 回の挿入とコミットを行い、すべてのレコードがデータベースに入るまで繰り返しました。このシナリオで 1 秒あたり約 500 リクエストのスループットを測定しましたが、これは私のニーズを満たすものでした。

ここで挿入パフォーマンスを最適化する必要があることは明らかです。ただし、前述したように、純粋な JDBC ではなく、JPA と Toplink を引き続き使用したいと考えています。

JPA と Toplink を使用してバッチ挿入を作成する方法を知っていますか? JPA 永続化のパフォーマンスを向上させるための他の手法をお勧めできますか?

追加情報:

「リクエスト/秒」とは、リクエストの合計数 / テストの開始からデータベースに書き込まれた最後のレコードまでの合計時間を意味します。

em.persist()サーブレットとパーシスタの間にメモリ内キューを作成して、非同期呼び出しを試みました。パフォーマンスに大きく貢献しました。ただし、キューは非常に急速に増加し、アプリケーションは 1 秒あたり最大 200 のリクエストを継続的に受信するため、これは私にとって受け入れられる解決策ではありません。

この分離されたアプローチではem.persist()、トランザクションをコミットする前に、100 ミリ秒のリクエストを収集し、収集したすべてのアイテムを呼び出しました。EntityManagerFactory は、各トランザクション間でキャッシュされます。

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

java - Java EE SqlResultSetMapping 構文

次の Java 6 コードがあります。

最後の閉じ右括弧で構文エラーが発生します。Eclipseは、「EnumBodyを挿入してブロックステートメントを完成させます」および「列挙型識別子を挿入してEnumHeaderNameを完成させます」。javac からの同様の構文エラー。

私は何を間違っていますか?

0 投票する
7 に答える
54218 参照

java - Hibernate (JPA) 熱心なクエリを実行し、すべての子オブジェクトをロードする方法

以前の質問に関連して、データにアクセスする必要がある可能性のある複数のスレッドがあるため、すべての子オブジェクトが確実に読み込まれるようにしたいと考えています (したがって、遅延読み込みの例外を回避します)。これを行う方法は、クエリ (EJB QL) で「fetch」キーワードを使用することだと理解しています。このような:

Orderのセットを持つクラスを持つモデルを想定しOrderLinesています。

私の質問は、「個別の」キーワードが必要なようです。そうしないと、Orderfor eachが返されるようですOrderLine。私は正しいことをしていますか?

おそらくもっと重要なのは、どんなに深くても、すべての子オブジェクトを取得する方法があるかということです。約10〜15のクラスがあり、サーバーにはすべてをロードする必要があります...それは常に熱心で、特にWebフロントエンドがすべてをロードすることを意味するため、使用を避けてFetchType.EAGERいました-しかし、おそらくそれが行く方法です-それはあなたがすること?以前にこれを試してみたところ、ウェブページが非常に遅くなったことを覚えているようですが、おそらくそれは、2 番目のレベルのキャッシュを使用する必要があるということでしょうか?

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

java - JPA マルチトランザクションマネージャー

1 つの applicationContext.xml ファイルがあり、Spring ミドルウェア カスタム アプリケーションで構成された 2 つの org.springframework.orm.jpa.JpaTransactionManager (それぞれが独自の永続ユニット、異なるデータベースを持つ) があります。

TransactionStatus のコミット、保存、およびロールバックをいじらないように、アノテーション ベースのトランザクション (@Transactional) を使用したいと考えています。

同僚は、複数のトランザクション マネージャーがあると、コンテキスト ファイルが正しく構成されていても、これを行うと何かが混乱すると言っていました (参照は正しい永続化ユニットに移動します)。誰か問題を見たことがありますか?


あなたの構成では、2 つのトランザクション マネージャーがありますか? txManager1 と txManager2 はありますか?

それが、トランザクション マネージャーである 2 つの異なる Spring Bean である JPA で私が持っているものです。

0 投票する
6 に答える
15581 参照

java - Maven テスト中に persistence.xml が見つからない

統合テスト用の Maven ビルド中に、テスト データをテスト DB にロードしようとしています。persistence.xml は正しくコピーされてtarget/test-classes/META-INF/いますが、テストの実行時にこの例外が発生します。

javax.persistence.PersistenceException: aimDatabase という名前の EntityManager の持続性プロバイダーがありません

persistence.xml が見つからないか、読み込まれていないようです。

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

java - JPA エンティティ、Oracle 10g、およびカレンダー タイプのプロパティに問題はありますか?

JPA エンティティを Oracle 10g と組み合わせて使用​​すると、次のような非常に厄介な動作が発生します。

次のエンティティがあるとします。

このエンティティは Oracle 10g にマップされるため、DB にはT_ORDER主キーNUMBERIDTIMESTAMP列を持つテーブルが存在しますactivationDate

このクラスのインスタンスを有効化日で作成するとします15. Sep 2008 00:00AM。私のローカル タイムゾーンは CEST ですGMT+02:00。このオブジェクトを永続化し、T_ORDERsqlplus を使用してテーブルからデータを選択すると、テーブルに実際に格納されていることがわかります。14. Sep 2008 22:00これは、Oracle db のタイムゾーンが GMT であるため、これまでのところ問題ありません。

しかし、今は厄介な部分です。このエンティティを Java プログラムに読み戻すと、オラクルのタイム ゾーンが無視されていることがわかり14. Sep 2008 22:00 CEST、これは明らかに間違っています。

したがって、基本的に、DB に書き込むときはタイムゾーン情報が使用され、読み取るときは無視されます。

これに対する解決策はありますか?私が推測する最も簡単な解決策は、Oracle dbs のタイムゾーンを に設定することですがGMT+02、残念ながら、同じサーバーを使用している他のアプリケーションがあるため、これを行うことはできません。

以下の技術を使用しています

MyEclipse 6.5 JPA と Hibernate 3.2 Oracle 10g シン JDBC ドライバー

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

java - JPA の複合キー

自動生成された主キーだけでなく、他の 2 つのフィールドで構成される一意の複合キーを持つエンティティを作成したいと考えています。JPAでこれを行うにはどうすればよいですか?
主キーは別のテーブルで外部キーとして使用する必要があり、それを複合化するのは良くないため、これを行いたいと考えています。

次のスニペットでは、コマンドとモデルを一意にする必要があります。pk はもちろん主キーです。

0 投票する
6 に答える
3240 参照

java - どの EJB 3 永続プロバイダーを使用する必要がありますか?

私はかなり大規模な J2EE プロジェクトで EJB 3 を使用しています。デフォルトでは、Netbeans はエンティティ Bean の永続プロバイダを TopLink に設定します。プロバイダーを次のいずれかに変更するか、新しい永続ライブラリを追加するオプションがあります。

  • 休止状態
  • 鼓童
  • OpenJPA

どの持続性プロバイダーを使用したいですか? 別のプロバイダーを使用する利点は何ですか?

TopLink は良さそうに見えますが、キャッシングなどを制御する方法に関する適切なドキュメントはあまり見つかりません。