問題タブ [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 投票する
3 に答える
14226 参照

java - JPAユニットテストフレームワークを提案する

JPAコードをユニットテストする方法は?ユニットテストケース自体を生成する方法はありますか?

注:私は怠惰で、ユニットテストコードを初めて使用します。

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

java - JPAの単体テストケースは価値がありますか?とにかく、DBにアクセスするだけなのに、なぜそれが必要なのですか?

JPAの単体テストケースは価値がありますか?とにかく、DBにアクセスするだけなのに、なぜそれが必要なのですか?

0 投票する
9 に答える
1250 参照

java - 注釈ではなく XML で休止状態を構成する正当な理由はありますか?

私は数年間 Hibernate を使用してきましたが、注釈とコードで接続パラメーターを設定することによってのみ使用しました。

XML ファイルを使用しないことで「何かが足りない」のでしょうか? XML でのみ使用できる重要な機能はありますか? XML を使用することが理にかなっている状況やパターンはありますか?

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

java - JPA / Hibernate / PG でのマップの問題

Entity1 と Entity2 の 2 つのエンティティが 1 対多の関係にあります。Entity1 には、エントリを含むマップがあります。

マップ上にいくつかの Entity2 を持つ新しい Entity1 を永続化するために使用するコードは次のようになります。

エンティティの抜粋は次のとおりです。



pgデータベースに両方のエンティティを挿入するため、これはうまくいくように見えますが、問題は、データベースにe2のMapKeyを作成して保存していないことです(理論的にはJPAがこのキーを生成します)ので、e1を取り戻すと、そこからe2sマップを取得しようとしましたが、次のものがあります。

javax.ejb.EJBException: org.hibernate.HibernateException: コレクションのインデックス列が null です:

この MapKey を保存するにはどうすればよいですか??

注: JPA/Hibernate で JavaEE を使用し、JBoss 4.2 で実行し、PGSQL DB を使用しています。

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

java - JPA が「on delete set null」FK 制限を生成しない

関連する 2 つのクラスに JPA アノテーションが付けられています。アラームとステータス。1 つのアラームは 1 つのステータスを持つことができます。

必要なのは、1 つのステータスを削除し、削除されたそのステータスにあるアラームに null 値を「伝播」できるようにすることです。

つまり、外部キーを「on delete set null」として定義する必要があります。

例:

前:

After (id=2のステータスを削除)

Hibernate と PostgreSQL を使用して、ソース コードからデータベースを自動的に生成しています。可能なすべての CascadeType を試しましたが、成功しませんでした。

コードに何か問題がありますか? JPAでそれを行うことは可能ですか?

0 投票する
8 に答える
131933 参照

java - JPAの熱心なフェッチは参加しません

JPAのフェッチ戦略は正確に何を制御しますか? 熱心と怠惰の違いを検出できません。どちらの場合も、JPA/Hibernate は自動的に多対 1 の関係に参加しません。

例: 個人の住所は 1 つです。アドレスは多くの人に属することができます。JPA アノテーション付きエンティティ クラスは次のようになります。

JPA クエリを使用する場合:

JPA/Hibernate は、Person テーブルから選択する 1 つの SQL クエリを生成し、次に人物の個別のアドレス クエリを生成します。

これは、大きな結果セットでは非常に悪いことです。1000 人がいる場合、1001 個のクエリが生成されます (1 つは Person から、1000 は Address とは異なります)。これは、MySQL のクエリ ログを見ているのでわかります。アドレスのフェッチ タイプを熱心に設定すると、JPA/Hibernate が結合で自動的にクエリを実行することを理解していました。ただし、フェッチ タイプに関係なく、リレーションシップに対して個別のクエリが生成されます。

明示的に参加するように指示した場合にのみ、実際に参加します。

ここで何か不足していますか?多対 1 の関係を結合したままにするために、すべてのクエリを手作業でコーディングする必要があります。MySQL で Hibernate の JPA 実装を使用しています。

編集: JPAクエリに影響を与えないようです(Hibernate FAQ hereおよびhereを参照) 。FetchTypeしたがって、私の場合、参加するように明示的に指示しました。

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

java - JPA/Hibernateの最大参加数?

JPA/Hibernate クエリで許可される結合数に制限はありますか?

Hibernateは自動的に join しないため、JPA/Hibernate クエリで明示的に結合を指定する必要があります。たとえば、人には住所があり、住所には州があります。次のクエリは、住所と州が完全に読み込まれた人物を取得します。

結合を追加し続けると、最終的に (12 ~ 13 個の結合を残した後)、Hibernate が無効な SQL を生成する限界に達します。

Hibernate の方言をデータベース実装の MySQL に設定しています。

Hibernate が単一のクエリで処理できる結合の数に制限はありますか?

編集 1:以下はログ ファイルにあります。

ただし、something69_2_SQL クエリには表示されません。Hibernate が SQL クエリを生成something69_2_し、結果に含まれることを期待しているようですが、そうではありません。

編集 2:未修正の Hibernate バグ HHH-3035として文書化された同様の問題

編集 3:これは文書化されたHibernate バグ HHH-3636であり、修正されていますが、まだどのリリースにも含まれていません。

編集 4:バグ修正 HHH-3636 を含む hibernate-core 3.3.2-SNAPSHOT をビルドしましたが、この問題は解決されませんでした。

編集 5:バグの動作はLEFT JOIN FETCH、ManyToMany または OneToMany の複数の関係によって引き起こされるようです。1 つが機能し、2 つまたは 3 つがバグになります。

編集 6:スタック トレースは次のとおりです。

編集 7:これらすべての結合の理由は、Hibernate が n+1 クエリを実行するのを避けるためです。 Hibernate クエリを実行するときに n+1 SQL SELECT クエリを回避するにはどうすればよいですか?

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

java - EclipseLinkのバッチクエリヒントに相当するHibernate?

私がEclipseLinkで気に入っている点の 1 つは、バッチ クエリ ヒントと呼ばれる優れた機能です。これに相当する Hibernate はまだ見つかっていません。

基本的に、大量の結合を行うとすぐに面倒になり、必要以上に多くのデータを照会することになります (person を 6 つのアドレスに結合すると、person 情報が 6 回返されることに注意してください。これを追加の結合で乗算し続けます)。 .

Address、Email、Phone、および OrderHistory の 0:M コレクションを持つ Person エンティティを想像してください。すべてを結合するのは良くありませんが、バッチメソッドを使用します:

これにより、Person テーブルに対してクエリが実行され、それだけです。住所レコードに最初にアクセスすると、住所テーブル全体に対して単一のクエリが実行されます。Person テーブルで where 句を指定した場合、これと同じ基準が Address ロードにも使用されます。

したがって、1 つのクエリを実行する代わりに、5 つのクエリを実行します。

結合を使用してそれを行っていた場合、1 つのクエリですべてを取得できますが、結合のためにさらに多くのデータをロードする可能性があります

とにかく、これに相当するものをHibernateのドキュメントで探しましたが、見当たりません。ありますか?

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

hibernate - デイリー ビルドを休止状態にする

ダウンロードできる Hibernate のデイリー ビルドはありますか? リリースされたバージョンにないバグ修正のために最新バージョンが必要です。現在、最新バージョンをビルドしようとしていますが、あらゆる種類のテスト ケースの失敗に直面しています。ダウンロードして使用するだけの毎日のビルドがあれば、より高速になります。