問題タブ [spring-data-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.
spring - Spring データ JPA java.lang.IllegalArgumentException: Not an entity
spring data JPAサンプルプロジェクトを作成しました。これにはEclipseを使用しました。2 つのプロジェクトがあり、1 つはアノテーション付きエンティティ クラスのみを持つドメイン オブジェクト プロジェクトです。他のプロジェクトは実際のSpring Data jpaプロジェクトであり、プロジェクト1に依存しています。実際には、maven の依存関係を介してドメイン プロジェクトのエンティティ クラスを取得します。
プロジェクト 1 : hrm ドメイン
エンティティ クラス:
プロジェクト 2 : hrm-ws-service
persistance-context.xml
したがって、私のパッケージのセットアップは次のとおりです。
src/main/java - Spring リポジトリが含まれています
src/main/resources - アプリケーション コンテキストを含む
src/test/java - 単体テストが含まれています
プロジェクト 1 (hrm-domain) の依存関係
私の問題は、このプロジェクトを実行すると、次のようなエラーが発生することです。
この問題について疑問に思っているのは、ドメイン オブジェクト (Employee.java) を春のプロジェクトに配置すると、jar が分離されて正常に動作するためです。この問題は、別の jar として提供する場合にのみ発生します。そのようなシナリオについての経験がある人は、助けてください。
spring - Spring ベースの Web アプリケーションでの JPA と Hibernate の有効な混合
Spring と JPA を使用する新しい Web アプリケーションを調べています。org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter の jpaVendorAdapter を使用して、Hibernate のどの部分が実際に使用されているか、この構成で利用できるのか疑問に思っていました (以下の構成を参照)。
残りのコードベースを検索すると、コード内で Hibernate への参照をキャッシュしている POJO/エンティティしか見つかりません。ここで Hibernate キャッシュを使用する理由 Hibernate への依存関係を置き換えることができる JPA オプションはありますか?
Spring contextConfigLocation ファイルの抜粋:
java - Spring JPA データのリポジトリ
Spring JPA Data を機能させようとしていますが、苦労しています。これが問題です。
単純な OneToMany 関係を持つ 2 つのドメイン クラスがあります。
各クラスのリポジトリ インターフェイスをセットアップしました: CardRepository、JpaRepository を拡張する UserRepository、両方のリポジトリがサービスに挿入されます。
かなり基本的な設定。問題は someMethod() に付属しており、ユーザーにその識別子を照会し、マップされた @OneToMany のリストを取得しようとすると、LazyInitialization 例外が発生しました。
そこに何かを逃したかどうかはよくわかりませんか?リポジトリのメソッドが返される限り、entitymanager は閉じられているようです。その場合、別のリポジトリ メソッドを定義せずに関係を取得するにはどうすればよいでしょうか。
ただし、@OneToMany のフェッチを熱心に設定しても問題ありませんが、それは私が本当にやりたくないことです。
リポジトリの delete() も問題があるようです。最初にカードを削除してから、所有しているユーザー (まだリストにカードがある) を delete() しようとすると、カードが見つからないという不平を言って削除が失敗します。しかし、ユーザーからカードへの削除の伝播を設定しませんでした!
JpaRepository で entitymanager がどのように使用されているかを誰かが説明できることを願っています。Jpa プログラミングがより難しくなっているようです。すべてのリポジトリが自動的に生成されることは知っていますが、それらがどのように実装されているかを誰かが指摘できれば、非常に役立ちます。
ありがとう。ウードン
hibernate - Spring-dataJPAリポジトリ結果でnull値を失うことによる順序付け
クエリにspring-dataとjpaリポジトリを使用しています。ManyToOneフィールドを持つエンティティがあり、クエリでこのフィールドで並べ替えると、このフィールドにNullが含まれる値がリストに返されないという問題があります。これは適切な動作ではないようです。
私のエンティティは次のようになります。
次に、ManyToOneユーザーエンティティ
私は次のようなJPAリポジトリを持っています:
あなたがアイデアを得ることができるように、私は多くのコードを単純化しました。すべてのクエリは正常に機能しています。Pageableオブジェクトの[並べ替え]をowner_user_id列で並べ替えるように設定すると、問題が発生します。アイテムテーブルのいずれかのエントリのowner_user_idがnullの場合、それらはリストに返されません。
これを回避するために追加できる注釈の種類はありますか?または私ができる他の何か?私は本当にリポジトリを使い続けたいのですが、これを回避できなければそうは思わないでしょう。私は休止状態とMYSQLを使用していますが、それが問題の一部であるかどうかはわかりません。
ありがとう。
java - SpringData を使用した読み取り専用リポジトリの作成
Spring Data を使用して読み取り専用リポジトリを作成することは可能ですか?
findAll()
ビューにリンクされたいくつかのエンティティと、いくつかのメソッドを含むリポジトリを提供したいいくつかの子エンティティと、注釈findOne()
付きのいくつかのメソッドがあります。andのようなメソッドは意味がなく、エラーが発生する可能性が@Query
あるため、提供することは避けたいと思います。save(…)
delete(…)
ありがとう!
spring - crudRepositoy を使用した DAO からの NullPointerException
CrudRepository を使用して java.lang.NullPointerException を取得しました
私のプロジェクトは次のようになります。
strut2 アクション
サービス
リポジトリ
ドメイン
ここに設定があります:
私はここが初めてで、Action クラスを呼び出すたびにサービスが注入されますが、MyRepository は常に null です。
誰か助けてください。さらに情報が必要な場合は、教えてください、thx!
編集1
スタックトレース:
私も自分でデバッグしようとしました。クラス ServiceImpl で@Autowired MyRepository リポジトリが null であることがわかりました。
java - Spring Data JPA 無効な page.sort パラメータ
Hibernate で Spring Data JPA を使用する Web アプリケーションでは、Web ページネーション機能を利用して、エンティティのさまざまなリストでページングおよびソート機能を提供します。
これにより、レンダリングされた html でエンティティ プロパティを特別な並べ替えリクエスト パラメータとして定義できます。このpage.sort
値は、並べ替え対象のエンティティ内のプロパティと実際に一致します。
これにより、次のような結果の URL が生成されます。
問題は、ユーザーが URL を変更して、page.sort
存在しない列/プロパティ名を参照する無効なプロパティを使用するか、さらに悪いことに、構文が無効になる無効な JPA クエリ文字を使用する可能性があることです。
たとえば、「noSuchProperty」でソートするように URL を変更した場合:
ただし、このプロパティは存在しないため、次の例外がスローされます。
同様に、URL が """ などの無効なクエリ構文文字に変更された場合:
次のエラーが発生します。
( Repository メソッドで が明示的に定義されているorg.hibernate.QueryException
場合に発生する 3 番目の種類の例外もあります。)@Query
Spring Data JPA は、これらのパラメーターの並べ替え、ページング、および処理の詳細を抽象化します。ただし、これらのシナリオ (つまり、無効な並べ替えパラメーターが指定されている場合) を適切に処理していないようです。
追加のカスタム ロジックを追加して、エンティティに並べ替えプロパティが実際に存在することを検証できます。ただし、Spring Data JPA 抽象化の利点とシンプルさを失わないように、これを行うためのよりクリーンで集中化されたアプローチがあるかどうか疑問に思っています。この並べ替え機能はアプリ全体でさまざまなエンティティを使用して使用するため、要求されたすべてのエンティティ ページの並べ替えプロパティを明示的に定義または確認するのではなく、より一般的なアプローチが必要になるのが理想的です。
PageableArgumentResolver
具体的には、コントローラーで提供される注釈付きの並べ替えのデフォルト値を受け入れるように を実際に拡張します (簡単にするためにコード例には示されていません)。例外をスローするのではなく、エンティティに対して。
いくつかのアイデアと試み.. a を使用しQueryCreationListener
て、クエリの作成を傍受し、並べ替えパラメーターを取得できます。ただし、その時点でクエリを実際に変更することはできません。または、カスタムを拡張して使用することもできますPageableArgumentResolver
(これは既に行っています)。並べ替えパラメーターを取得します。ただし、その時点でエンティティにアクセスすることも、エンティティが実際にその名前のプロパティを持っているかどうかを判断することもできません。サポートされているプロパティを明示的に宣言できます。ただし、繰り返しになりますが、これは、エンティティの特定または宣言された知識を必要とせずに、このシナリオを一元的かつ自動的に処理するという考えを無効にします。
ページング可能な並べ替えパラメーターを一元的に検証し、クエリを呼び出す前に必要に応じて変更するために利用できる他のタイプのインターセプターまたは同様の構造はありますか? または、Spring がこのシナリオを自動的に処理して、無効な並べ替えパラメーターをより適切に処理できるような構成または方法はありますか?
spring - Spring JPA リポジトリ SQL エラーが発生した場合の処理方法は?
私のプロジェクトでは、Sring JPA リポジトリの概念を使用してデータベースとやり取りしています。現在、リポジトリには、エンティティを保存する Repository.save().. などの多くの組み込み CRUD 関数があります。
保存中に、次のような SQL エラーが発生し、保存操作が失敗することがあります: SQL エラー:
私の懸念は、Javaコードでこれらの種類のエラーを処理する方法です。このメソッドがこれらの種類のエラーで処理できる例外をスローするのを見ることができないためです。
jsf-2 - JPA データ リポジトリ (JSF 統合) への参照を保持しているオブジェクトでの Spring Webflow シリアライゼーション エラー
Spring Webflow: 2.3.1
Spring Data: 1.0.2
JSF: 2.1.9
Primefaces: 3.3.1
Spring Data JPA リポジトリを JSF DataModel と組み合わせようとしています。この場合は、Primefaces と LazyDataModel を組み合わせます。これは、Spring Webflow を使用して Spring と JSF を統合する WebApp で発生します。
問題は、Spring Webflow の ViewScope にある LazyDataModel 内で JpaRepository を使用する場合です。
フローの実行をシリアル化できませんでした。フローまたはフラッシュ スコープに保存されているすべてのオブジェクトがシリアライズ可能であることを確認してください。
LazyDataModel 内に JpaRepository がないと、正しいページを取得できず、Spring データのページネーション モデルを使用できません。私はすでに同じ問題を抱えている人を見つけましたが、残念ながら誰も答えませんでした:
事前にご協力いただきありがとうございます
よろしくお願いします
JSマス
java - プリミティブ型ではなく、JPA @Idに常にプリミティブオブジェクトラッパーを使用しますか?
SpringDataJPAと組み合わせてJPAのオブジェクト@Idとしてプリミティブ型を使用する際の問題を発見しました。親側のCascade.ALLと親子関係があり、子はPKを持ち、同時に親のFKでもあります。
だから、私が実行すると:
すべてが正常に動作します。ただし、Spring Data JPAを使用してエンティティを永続化したため、代わりに次のコマンドを実行します。
これは、次の例外を除いて失敗しました。
問題は、Spring Data JPA save()メソッドがエンティティが新しいかどうかをチェックし、新しい場合はem.persist()が使用され、そうでない場合はem.merge()が使用されることでした。
ここで興味深いのは、Springがエンティティが新しいかどうかをチェックする方法です。
そしてもちろん、これは誤りでした。@ Idの型としてlongを使用し、longのデフォルト値は0でした。longをLongに変更すると、すべてがSpringDataJPAでも機能します。
したがって、プリミティブ型ではなく、プリミティブ型(longではなくLongなど)のオブジェクトラッパーを常に使用することをお勧めします。これを推奨される方法として説明しているサードパーティのリソースは非常に便利です。