問題タブ [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 - Hibernate/JPAのアノテーションフィールドまたはゲッターメソッド間のパフォーマンスの違い
パブリックゲッターメソッドの代わりにプライベートフィールドを使用してエンティティにアノテーションを付けることのパフォーマンスの違いについて、誰かが難しい数字を持っているかどうか知りたいと思いました。フィールドは「リフレクションによる」と呼ばれるため遅いと言われていると聞きましたが、ゲッターメソッドもそうですよね?Hibernateは、フィールドを読み取ろうとする前に、フィールドのアクセシビリティをtrueに設定する必要があります。これは、わずかなオーバーヘッドがあることがわかります。しかし、それはセッションのスコープ内のクラスレベルで行われるのではないでしょうか、それとも構成が読み取られてSessionFactoryが構築されるときに1回だけ行われるのでしょうか。
これが神話なのか、それとも本当に真実なのか、興味があります。個人的には、フィールドに注釈を付けるともう少し読みやすくなります。
java - EntityListeners から EntityManagers にアクセスできますか?
JSR-000220 Enterprise JavaBeans 3.0 Final Release (persistence) 仕様に次のように記載されていることは承知しています。
「一般に、ポータブル アプリケーションは、EntityManager またはクエリ操作を呼び出したり、他のエンティティ インスタンスにアクセスしたり、ライフサイクル コールバック メソッドで関係を変更したりしないでください。」
これは非常に制限的であると思われます。EntityListener 内から EntityManager にアクセスしたい状況があります。
Jboss/Glassfish、またはその他のアプリケーションサーバーのリスナー内から EntityManager を使用するときに、悪影響や落とし穴に遭遇した人はいますか?
grails - Grails の MappedSuperclass の代替案
過去の多くのプロジェクトで、このJPA / Hibernate アプローチを使用してシステムに監査機能を追加しました。それは非常に効果的で控えめです。
Grails @MappedSuperclass の代替手段 (Groovy の代わりに Java でドメイン モデル オブジェクトをコーディングする以外) はありますか? テーブルを作成せずに、サブクラスごとのテーブルアプローチで親クラスを宣言するにはどうすればよいですか? GORM のドキュメント ( 5.2.3 Inheritance in GORM ) を読みましたが、階層ごとのテーブルとサブクラスごとのテーブルの議論以外に、これを行う方法の詳細は見つかりませんでした。
または、Grails でこのタイプの監査を実現するための推奨される方法は何ですか?
java - javase プロジェクトでの Eclipselink の問題
eclipselink プロジェクトを実行しているときに、このエラーが発生します。
何か案は?eclipselink が jboss から何かを必要とするのはなぜですか? どの jboss jar が必要ですか。私はopen jpaを使用しますが、何らかの理由で、アプリからいくつかの永続化を終了した後、一連のstackoverflowエラーが発生し始めます。
jpa - JPA を使用してカスケード経由で永続化されたエンティティの ID を取得する方法
通常の Foo エンティティがあり、persist(foo) を呼び出すと、エンティティに @Id が自動的に設定されます。ただし、上記の Foo エンティティに Bars のコレクションがバインドされている場合は、
新しい Bar を作成して foo の Bars コレクションに追加し、merge(foo) を呼び出すと、作成したばかりの Bar は永続化されますが、その @Id は更新されません!
後で find(Foo.class, foo.getId()) を呼び出さずに、この ID を取得する方法はありますか?
database - 別のテーブルとリレーションシップを持つテーブルに行を挿入する
私のデータベーススキーマには、特定されたエンティティがあります。識別子は再利用できるため、エンティティとは 1 対多の関係になります。例: 人にニックネームを付けることができます。ニックネームは一意ではなく、多くの人の間で共有できます。したがって、スキーマは次のようになります。
問題は、新しい人を挿入するときに、最初にクエリNICKNAME
を実行してニックネームが存在するかどうかを確認する必要があることです。そうでない場合は、で行を作成する必要がありますNICKNAME
。多くの人を挿入する場合、各人の挿入が へのクエリになるため、これは遅くなる可能性がありますNICKNAME
。
最初に Nickname ですべてのニックネームを照会することにより、大量の挿入を最適化できました。JPA クエリ言語:
そして、必要に応じて新しいニックネームを作成し、その後に個人にnickname_idを設定します。
これにより、ニックネームを一時的にメモリに保存する必要があるため、ソフトウェアが少し複雑になります。さらに、一部のデータベースでは句のパラメーターに制限があるためIN
(SQL Server は 2100 程度)、複数のクエリを実行しました。
この問題が他の人によってどのように処理されているのか興味があります。より具体的には、データベースが正規化され、エンティティが別のエンティティと関係を持っている場合、新しいエンティティを挿入すると、基本的に他のエンティティをチェックする必要があります。大規模な挿入の場合、操作がコード ドメインに持ち上げられない限り、これは遅くなる可能性があります。関連するテーブル行を自動挿入する方法はありますか?
参考までに、Hibernate の JPA 実装を使用しています
eclipse - Eclipse で Hibernate Tools を使用して SQL クエリを表示するには?
Eclipse に Hibernate Tools をインストールした後、生成される予定の SQL クエリを JPA クエリ言語から表示するにはどうすればよいですか? (JPA 実装として Hibernate を使用しています)
私の Java DAO クラスは次のようになります。
対応する SQL クエリがどうなるかを知りたいです。Hibernate Tools がこれを何らかの形でサポートしていると聞いたことがあります。
java - JPAで列挙型を使用する方法
映画レンタル システムの既存のデータベースがあります。各映画には評価属性があります。SQL では、制約を使用して、この属性の許容値を制限していました。
制約をオブジェクトの世界にマッピングするには、Java 列挙型を使用するとよいと思います。ただし、"PG-13" と "NC-17" の特殊な文字のため、許可された値を単純に取得することはできません。そこで、次の列挙型を実装しました。
toString() メソッドを使用すると、方向 enum -> String は正常に機能しますが、String -> enum は機能しません。次の例外が発生します。
[TopLink 警告]: 2008.12.09 01:30:57.434--ServerSession(4729123)--例外 [TOPLINK-116] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DescriptorException 例外の説明: フィールド [FILM.RATING] の値 [NC-17] に変換値が指定されていません。マッピング: oracle.toplink.essentials.mappings.DirectToFieldMapping[rating-->FILM.RATING] 記述子: RelationalDescriptor(de.fhw.nsdb.entities.Film --> [DatabaseTable(FILM)])
乾杯
ティモ
java - Spring、Hibernate、および JPA: entitymanager での永続化の呼び出しがデータベースにコミットされていないようです
Hibernate と JPA を使用して Spring をセットアップしようとしていますが、オブジェクトを永続化しようとすると、データベースに何も追加されないようです。
以下を使用しています:
AccountManager では、次のことを行っています。
AC の由来:
私が間違っていることを指摘できる人はいますか?persist 呼び出しは、例外をスローせずに戻ります。後で実行するem.contains(ac)
と、true が返されます。
誰かが必要な場合に備えて、 Account の定義方法は次のとおりです。