問題タブ [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.
java - どのアノテーションを使用する必要がありますか: @IdClass または @EmbeddedId
( JPA
Java Persistence API) 仕様には、エンティティ複合キーを指定する 2 つの異なる方法があります:@IdClass
と@EmbeddedId
.
マッピングされたエンティティで両方の注釈を使用していますが、JPA
.
複合キーを指定する方法を 1 つだけ採用したい。どれが本当に最高ですか?なんで?
java - JPA 関係における列のカスタマイズされた命名
休止状態を使用して JPA との関係を作成すると、ひどく長くて厄介な列名が生成されます。
例えば。これはactionPlan_actionPlanPK
、列actionPlan
が を指す FK であることを意味しますactionPlanPK
。
DB でもう少しきれいに見えるようにするために、自分で名前を付けることができればと思います。できれば、関係を所有するエンティティ クラスにある名前だけを付けてください。
これはJPAで可能ですか?
java - すべての EntityManager を close() する必要がありますか?
自家製の永続化フレームワークを JPA に移行し始めたところです。
永続化フレームワークが多くの配管を隠していることを考えると、EntityManagers を閉じないとリソース リークが発生するかどうか、またはフレームワークがそれらを収集して閉じるかどうかを知りたいと思っています。
私はすべての場所でそれらを閉鎖するつもりですが、そうしなければなりませんか?
現時点では、NetBeans で簡単に動作するという理由だけで TopLink を使用していますが、喜んで他の JPA プロバイダーを調査します。
java - Hibernate が複合キーで無効な結果を返す
私は最も奇妙な結果を得ています。複合キーを持つクラスがあります。次のクエリを実行すると:
from LOVEJB l order by l.canonicalId desc
私の結果は、私が要求した「canonicalId」列によって順序付けられていません。代わりに、canonical id の結果は次のようになります。
823 823 822 823 、、、
これを解読するにはどうすればよいか、誰かが私にいくつかの指針を与えることができますか? 私はすでにhashcodesとequalsを台無しにし、新しいクラスなどを試しましたが、役に立ちませんでした。
java - JPA 複合キー + シーケンス
プレーンな JPA または JPA + Hibernate 拡張で、複合キーの要素がシーケンスである複合キーを宣言することは可能ですか?
これは私の複合クラスです:
application
、entity
、nativeId
およびの値はすでに指定していますnativeKey
。以下のようなエンティティを構築したい:
em.persist(i1
)を呼び出すと、canonicalId
が生成され、統合が挿入されます。
これは可能ですか?もしそうなら、簡単な方法は何ですか?(私はアプリケーション提供のキーやネイティブ SQL を使用したくありません)。
java - データベースからオブジェクトを取得するときに JPA (Hibernate) がトランザクションを処理する方法
私は現在、Hibernate を永続化マネージャーとして使用し、JPA を永続化管理の休止状態の抽象化として Java でアプリケーションを開発しています。
結果クエリをトランザクションにラップすることの影響を知りたいです。エンティティマネージャーは、遅延フェッチされたフィールドのバグに対して開いたままにしておく必要があることを知っています。これでトランザクションはどうなりますか?
以下は、トランザクションのアクティブ化/非アクティブ化機能を使用したコード例です。
この関数が呼び出されたときの withTransaction の有効化と無効化の違いは何ですか?
ありがとう、フレッド
java - EJB3ビジネスロジックのパターンと実践
私はEJB3(アプリとWebサービスレイヤーの場合はHibernate + Glassfish、WebUIの場合はLifton Glassfish)を使用してJavaで多層金融処理アプリケーションを開発中です。私のビジネスロジックを置きます。
このプロジェクトが開始されたとき、私たちの最初の概念は、ビジネスロジックの大部分をステートレスセッションBeanに入れることでした。ただし、時間が経つにつれて、EJBフレームワークによって提供される依存性注入が制限されすぎることがわかりました。そのため、ビジネスロジックの多くは、ステートレスセッションBeanの@PostConstructメソッドでGuiceによってアセンブルされるPOJOになりました。 。この進歩により、セッションBeanとPOJOの間のビジネスロジックが断片化されました。私は、これを修正するためのアプローチを見つけようとしています。
最初に、Web層でセッションBeanのリモートインターフェイスを使用して、UIとWebサービスレイヤーの両方からアクセスできるいくつかの機能を実行しようとしました。これは、@WebService注釈付きのステートレスセッションBeanによって提供されます。これは、永続性とパフォーマンスの観点からは悪夢であることが判明しました。エンティティグラフが非常に大きくなる可能性があり、分離されたエンティティグラフを永続性コンテキストに再アタッチするとエラーが発生しやすいことが判明したため、ソリューションはオブジェクトの受け渡しを開始することでした。必要な場所でデータベースからエンティティを検索します。
私の基本的な質問はこれです:ビジネスロジックをセッションBeanとPOJOのどちらにするかを決定するために、どのような原則とガイドラインを提案できますか?複雑なオブジェクトグラフがある場合、エンティティBeanを渡すことが理にかなっているのはいつですか。
hibernate - JPA/結合時にHibernateSelect列サブセット
SQLでは、結合を実行して、結合されたテーブルから必要な列のみを返すのは簡単です。これをJPA/Hibernateでマッピングするための最良の方法は何ですか?
たとえば、EMAIL_FOLDERにマップされたFolderエンティティとEMAILテーブルにマップされたEmailエンティティがあります。フォルダから電子メールまでは1対多の関係があります。電子メールエンティティには、テキストや添付ファイルなどのCLOBが含まれているため、かなり重いです。電子メール全体を取り戻す必要がある場合もあれば、senderName、subject、sentDateだけを取り戻したい場合もあります。 CLOBデータを取り込むことによるメモリオーバーヘッドは必要ありません。SQLでこれを実現するのは簡単ですが、JPA/Hibernateで最適なアプローチが何であるかはわかりません。
senderName、subject、sendDateにのみマップするLightEmailを作成することを考えています。これは、このようなものを処理するための最良の方法ですか?
更新:この時点で、可能であればバイトコードのインストルメンテーションを避けたいと思います。
hibernate - Spring & Hibernate EJB イベント
Spring 管理の EJB3 休止状態リスナーを定義することは可能ですか?
persistence.xmlに次の定義があります。
HibernateAuditInterceptor
しかし、私はSpringで管理したいHibernateAuditTrailEventListener
ので、これらのクラス内でBeanインジェクション(例:セッションスコープのBean)を行うことができます。これは可能ですか?
performance - ORM ソリューション (JPA; Hibernate) と JDBC の比較
インメモリ HSQL データベースで、5 秒ごとに少なくとも 8000 オブジェクトの一貫した速度でオブジェクトを挿入/更新できる必要があります。
Spring/Hibernate/JPA と純粋な JDBC の間でいくつかの比較パフォーマンス テストを行いました。HSQL を使用すると、パフォーマンスに大きな違いがあることがわかりました。Spring/Hib/JPA を使用すると、1.5 KB オブジェクト (1 対多および多対多の関係) を 5 秒で 3000 ~ 4000 個挿入できますが、直接ではJDBC 呼び出しでは、同じオブジェクトを 10,000 ~ 12,000 個挿入できます。
なぜこのような大きな違いがあるのか わかりません。Spring/Hib/JPA の設定を何度も微調整して、運が悪ければパフォーマンスに近づこうとしました。将来の目的、拡張性、および外部キー関係 (1 対多および多対多) を手動で維持するのが難しいため、Spring/Hib/JPA を使用したい。しかし、パフォーマンス要件は、純粋な JDBC の使用を指しているようです。
なぜこのような大きな違いが生じるのか、何か考えはありますか?