問題タブ [eclipselink]
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.
jpa - JPA を使用して複合主キーのシーケンス番号を間接的に生成する
データベースで次のように見える複合主キー(uid、lid)を持つJPAエンティティクラスがあります。
どうすればEclipseLink/JPAにオンザフライでシーケンス番号を生成させることができますか、またはUID列で最大の番号を見つけるにはどうすればよいですか?
または、UID を持っているが、新しい LID を追加したい場合は?
これがあまりにも簡単な質問である場合は申し訳ありません。:) 複合キーは私にとって非常に複雑なものですが、少し理解し始めたと思います。
java - like句JPQLのパラメータ
like 句を使用して JPQL クエリを作成しようとしています。
code=4 にして見つけたい
通れません:code = '%value%'
別の場所では、文字:value
でラップする必要がないからです。%
何か助けはありますか?
jpa - エンティティを削除するが、削除後に同じ主キーを使用して同様のエンティティを追加する
次のような一意の PK を持つエンティティを削除しようとしています: 80253
次のコード行を実行して、このエンティティを削除します。
これらのコードは、データベースとそのすべてのカスケード オブジェクトから実際に行を適切に削除します。これについては非常に満足しています。同じ主キーを使用する同様のエンティティを作成する必要があるときに問題が発生します (これは正しく行われているはずです)。
ここで、一意の制約 SQL エラーが発生します。既に存在する ID を挿入しようとすると、変更が自動的にロールバックされます (古いエンティティは削除されません)。これは、トップリンクが古いエンティティのレコードを削除したことをロガーで確認した後に発生します。
これがどのように発生するのか、なぜ機能しないのか、誰かが知っていますか? 記録として、entityManager のマージ、クローズ、クリアを試みましたが、何も機能していないようです。
JPAは悪いキャッシングか何かをするかもしれないと私には思えます。誰かが私に良い答えをくれることを願っています!=)
更新:一意の ID 制約に関する問題はなくなりましたが、削除された同じ主キーを持つ新しいサブクラスを作成すると、次の例外が発生します。
オブジェクトを別のサブクラスに変更できないように思えますか?
inheritance - JPA継承はサブクラスでIDを要求します
jpa ドメイン モデルに問題があります。私は、単純な Person 基本クラスと Customer サブクラスを使用する単純な継承をいじろうとしています。公式ドキュメント (JPA と EclipseLink の両方) によると、基本クラスの ID 属性/列のみが必要です。しかし、テストを実行すると、Customer has no @Id? というエラーが常に表示されます。
最初に、問題は id-attribute の可視性にあると思いました。最初はプライベートだったからです。しかし、保護に変更した後でも(サブクラスが直接アクセスできるように)、機能していません。
人:
お客様:
検討するアイデアやリソースが不足しています。それはかなり単純な問題のはずですが、私にはわかりません。
java - EclipseLink で接続を変更する方法
アプリケーションでEclipseLinkを使用しています。EclipseLink はいくつかの接続プールを使用します。私はEclipseLinkの内部のものを使用しています。接続プールは、必要なときに接続を作成し、将来の使用のために保持します。
接続の作成時に、接続ごとに 1 つの特定の SQL 呼び出しを行う必要がありますが、1 回だけです。私がする必要があるのは、Oracle でユーザー固有の役割を付与することです。セキュリティのために、このユーザーにはこの役割がありますが、無効になっているため、有効にする必要があります。
接続がプールから取得されるたびに実行するのではなく、接続が作成されたときにのみ実行します。
どうすればいいですか?
java - JPA: How do I synchronize the persistence context with the result of the bulk update or delete?
There's a statement in the ejb-3_0-fr-spec-persistence.pdf which reads
The persistence context is not synchronized with the result of the bulk update or delete
したがって、テーブルから行を削除する query.executeUpdate を実行するとします。これらの同じ行は、1 対多のコレクションの別のエンティティにまだ存在します。アプリケーションを再起動すると、ファントム エンティティがコレクションから削除されていることがわかります。
JPAのキャッシュを一括 update\delete の結果と同期させる(ナイス\シンプル\ジェネリック)方法はありますか?
ところで。EclipseLink を使用しています。バージョン: Eclipse Persistence Services - 1.1.0.r3634。
ありがとう、
フィル。
java - JP-QL (JPA 2.0) の「ElementCollection」マップ フィールドに対して「MEMBER OF」クエリを実行します。
連想配列に対して「MEMBER OF」クエリを実行することは可能ですか? もしそうなら、構文はどのように見えますか? 明らかな回避策はネイティブクエリですが、すべての結合などでかなり面倒になります。マップのキー セット、値コレクション、またはエントリ セット内のオブジェクトの存在をテストしたいと考えています。次のようなものかもしれません。
プロバイダーにとらわれないコードは、要求するには多すぎるかもしれません。Eclipselink はこれをサポートしていますか?
jdbc - OSGi 環境で JDBC ドライバーをプラグ可能にするにはどうすればよいですか?
とりわけ、JPA アノテーション付きドメイン モデルを含む 1 つのバンドルと、永続性プロバイダーとして Eclipselink を使用する別のバンドルを含む OSGi プロジェクトがあります。後者はEntityManager
、構成パラメーターを使用して をインスタンス化し、JDBC ドライバーのクラス名を決定します。
ここで、モデルを含むバンドルは JDBC ドライバーを認識できる必要があると思います。これは、eclipselink がモデル クラスのクラスローダーを使用してロードするためだと思います。これには望ましくない副作用がありImport-Package
、ドライバーをプルするためにモデルのバンドルでディレクティブを明示的に宣言する必要があります。OSGi を介してドライバーを交換することはもはや容易ではなく (マニフェストを再生成する必要があります)、そもそも OSGi を使用する目的を無効にします。
JDBC ドライバーはすべて同じインターフェースを実装しているため、私がやりたいことは、データベース ドライバーを独自のバンドルに入れ、それらを共通のインターフェース名で OSGi コンテナーに登録し、eclipselink で使用可能なものを使用することです。しかし、ドライバーがeclipselinkによってインスタンス化されているように見えるため、それを行う方法がわかりません。つまり、他の場所にインスタンス化することはできず、eclipselinkに実際のクラス名を忘れさせることはできません。
これは非常に典型的なことのようです。解決策はすでにあると思いますか?
今年初めのオラクルのショーン・スミスによるこの投稿は、おそらくないことを示唆していますが、それに対する需要が非常に現実的であるように見えることも示しています.
osgi - eclipselink がエンティティークラスの自動検出に失敗する理由は何ですか?
OSGi コンテナで eclipselink を実行していますが、エンティティ クラスは独自のバンドルにあります。
Eclipselink がエンティティークラスの自動検出に失敗し、「Xyz は既知のエンティティータイプではありません」というメッセージが表示されるという問題に繰り返し遭遇しました。これはデバッグするのが面倒で、私のやや無力なアプローチは、動作するまで構成ファイルを多かれ少なかれランダムに微調整することです。
もっと体系的なアプローチを知っていればよかったのですが、問題の考えられる理由について十分にわかっていないようです。彼らは何でしょうか?自動検出で何が起こるか、およびそれが機能するために何が必要かについての概要はありますか?
したがって、自分で問題に遭遇し、特定の理由を 1 つ特定できた場合は、ここに投稿するか、既に表示されているときに投票してください。そうすれば、頻度でソートされた典型的な問題のリストを作成できます。実際に解決したものを追加します。
私が知っている事実:
- eclipselink は、OSGi エクステンダー パターンを使用してバンドルの登録をリッスンし、それらをセットアップします。
- 永続化ユニットを定義するバンドルにクラスローダーを使用すると思われます。
persistence.xml
for 構成を使用している場合、これはそのファイルが配置されるバンドルです。
jpa - プログラムですべての関係を作成 CascadeType.MERGE
アプリでどのリレーションシップが CascadeType.MERGE であるかを厳密に定義しました。これは、バージョン チェック (楽観的ロック) に影響します。そのため、CascadeType 定義には MERGE がある場合とない場合があります。これはすべて、OLTP アプリケーションにとって素晴らしいことです。ただし、関係が異なる可能性があるデータをロードする必要もあります (オフラインで一括処理しても問題ありません)。私がやりたいことは、このバッチロード中にすべての関係を CascadeType.MERGE として扱うように jpa (または eclipselink) に指示することです。言い換えれば、このバッチロード中に eclipselink がアノテーションを無視するようにしたいのです。これは可能ですか?