問題タブ [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でページングされたQueryDSLクエリを実行するにはどうすればよいですか?
QueryDSLは、またはOrderSpecifier
を呼び出すことにより、任意のフィールドで簡単に取得できるインターフェースとインスタンスを定義します。Spring Data JPAのインターフェースには、パラメーターとしてsをとるメソッドもあります。asc()
desc()
QueryDslPredicateExecutor
findAll()
OrderSpecifier
org.springframework.data.domain.PageRequest
ただし、QueryDSLについては何も知らず、クエリの並べ替え順序を定義する独自の方法がありますorg.springframework.data.domain.Sort
。型安全性などではないことを除けば、sにorg.springframework.data.domain.Sort.Order
よく似た多数のsを含めることができます。OrderSpecifier
それで、ソートを使用するページクエリを作成したい場合、それを定義するためにQueryDSLを使用する方法は本当にありませんか?
eclipselink - Eclipselink & Spring データ
eclipselink (2.4.0) と spring-data-jpa (1.1.0.RELEASE) の組み合わせを使用してソリューションを実装しようとしています。ただし、ソリューション (Tomcat 7) をデプロイするたびに、次の例外が発生します。
これは、リポジトリのオートワイヤリングが行われたときに発生するようです (以下のコード例)。
サービスクラス
エンティティ クラス
persistence.xml
これは、春と eclipselink の間の競合が原因でしょうか?
アップデート:
スタックトレース...
spring - Spring Data JPA は、非リポジトリ クラスへの CGLib プロキシを強制します
既存の Spring 3 JPA 2 Hibernate Web アプリケーションを Spring Data JPA に移行しようとしています。ただし、最新の Spring Data JPA を Maven プロジェクトに追加し、Spring Data を次のように構成するだけです。
春は不平を言い始めます:
myapp.persistence.spring
上記のエラーが package のクラスを参照しているときに、Spring Data が package をスキャンするように構成されていることに注意してくださいmyapp.persistence
。プロジェクトに CGlib を追加すると、Spring Data を含むすべてが正常に動作します。しかし、何が起こっているのですか?私は春の新人で、かなり戸惑っています。Spring Data がどのようにプロキシ マジックを行うのかわかりませんでした。少なくとも公式の例には CGlib がまったく含まれていません。さらに詳しい情報:
CompanyRepository
は、EntityManager を使用した単純な自作の JPA-DAO です。
トランザクションは@Transactional
、AspectJ コンパイル時のウィービングによって有効になります。コンテキスト構成スニペット:
Tomcat 7.0.27 に展開
hibernate - Spring JPA Hibernate OneToOne
私はかなり長い間この問題を解決しようとしてきましたが、成功しませんでした。私は使っている:
- 春 3.1.1
- 休止状態 4.0.1.Final
- spring-data-jpa 1.0.2.RELEASE
- MySQL 5 (org.hibernate.dialect.MySQL5InnoDBDialect)
OneToOne の非方向性関連付けを持つ 2 つのエンティティがあります。テーブル間に外部キー関係はありません
そして、参照としてカスケード削除/何でもしたくない別のクラス
各テーブルには、bigint として宣言された userRoleId があります
私は2つのリポジトリを持っています:
と
ただし、ビルドすると次のエラーが発生します。
これは非常に単純なマッピング方法のように思えますが、私が見た例はすべて双方向です。それでも、なぜこれが機能しないのかわかりません。
spring - 春のデータ + 休止状態
Spring Data と Hibernate を使用していますが、セット ID でエンティティを保存しようとするとエラーが発生します。
JpaRepositories を介してエンティティを更新する方法を教えてください。または、どの設定を見逃していますか?
persistence.xml:
春のコンテキスト:
別のプロジェクトで OpenJpa を使用しましたが、そのような問題はありませんでした。エンティティに ID が設定されている場合、「保存」メソッドは作成および更新を行いました。では、どうすればオブジェクトを更新できますか? 独自の更新方法を実装する必要がありますか?
失敗したテスト:
hql - 春のデータクエリ
これが私のコードです。最初の方法は正常に機能しますが、2番目の方法は機能しません。誰かがそれを正しくする方法を教えてもらえますか?
spring-data - 複数のテーブルからのデータの管理SpringdataJPA
アプリケーションでSpringDataJPAを使用する場合、通常はエンティティ(@Entity)を定義し、リポジトリインターフェイス(CrudRepositoryを拡張する)を記述して、この質問の範囲外の追加の設定を行います。
例えば、
上記のような複数のエンティティがあり、searchByProductAndUserAndLocationのようなサービスAPIを設計する必要がある場合(3つすべてがデータベーステーブルであるとしましょう)、SpringデータJPAでこれをどのように行う必要がありますか?数量/コストのエンティティクラスも作成するとします。明らかに、(外部キーを使用して)いくつかの基準でテーブルを結合する必要がありますが、ここには特定の所有者リポジトリ/クラスがないと感じているため、どのリポジトリがそのようなクエリを保持する必要があるかがわかりません。
また、ProductService、LocationServiceなどでデータを公開し、結果を組み合わせることができますが、データベースレイヤーの結合やその他の最適化を利用して、最終的にアプリケーションのパフォーマンスに影響を与えることはありません。
これは非常に一般的なユースケースであると確信していますが、これの一般的な方法は何ですか?
前もって感謝します。
java - オブジェクトが永続コンテキストにない場合、Hibernate マージは DB にクエリを実行しません
私は使用しています:
- 春 3.1
- 春のデータ JPA 1.1
- 休止状態 4.1
私は問題があります。標準の Spring Data JPA DAO があります。
Dnar
コードは次のとおりです。
実装クラスの例:
また、Hibernate 用の Spring 構成は次のとおりです。
ラウンド 1 - 問題
DAO のクライアントは次のDnarManagerImpl
クラスです。
上記のコードは機能しますが、常にデータベースに新しいdnar
行が作成されます。Spring Data JPA コードをデバッグしましたが、正しく動作しているようです。たとえば、同じオブジェクトを 3 回保存すると、Hibernate の呼び出しは次のようになります。
getSession().persist(entity);
getSession().merge(entity);
getSession().merge(entity);
上記に対して Hibernate が出力する SQL は次のとおりです。
- に挿入...
- に挿入...
- に挿入...
ラウンド 2 - ハッキングの修正
少し実験した結果、 を使用して、このエンティティが存在することを現在のセッションに伝えることができることがわかりましたdnarDao.findOne(id);
。そして、これは私の問題を解決します:
ここでも、Hibernate セッションの呼び出しは次のとおりです。
getSession().persist(entity);
getSession().merge(entity);
getSession().merge(entity);
Hibernate が出力する SQL は正しいものになりました。
- に挿入...
- アップデート ...
- アップデート ...
質問
Hibernate docsによると、これはどのように機能するかmerge()
です:
- 永続化コンテキストに現在関連付けられている同じ識別子を持つマネージド インスタンスがある場合は、指定されたオブジェクトの状態をマネージド インスタンスにコピーします。
- 永続化コンテキストに現在関連付けられているマネージド インスタンスがない場合は、データベースからの読み込みを試みるか、新しいマネージド インスタンスを作成します。
- マネージド インスタンスが返される
- 指定されたインスタンスは永続コンテキストに関連付けられず、切り離されたままになり、通常は破棄されます
明らかに、私の例では、項目 2 は発生していません。Hibernate はデータベースからこのエンティティを読み込もうとしていません。Hibernateが選択を出力することはありません(私のハック修正では例外です)。すっごく....どこが間違っているのですか?Hibernate はドキュメントどおりに動作すると確信していますが、それは私が何かばかげたことをしただけです。
java - SpringDataJPAにカスタムメソッドを追加する方法
SpringDataJPAを調べています。以下の例を考えてみましょう。ここでは、すべてのクラッドとファインダーの機能がデフォルトで機能します。ファインダーをカスタマイズしたい場合は、インターフェース自体でも簡単に実行できます。
上記のAccountRepositoryの実装で完全なカスタムメソッドを追加するにはどうすればよいですか?そのインターフェースなので、そこにメソッドを実装することはできません。
java - spring-data-jpa を使用してエンティティを更新するにはどうすればよいですか?
まあ、質問はほとんどすべてを言っています。JPARepository を使用してエンティティを更新するにはどうすればよいですか?
JPARepository にはsaveメソッドしかなく、実際に create なのか update なのかわかりません。たとえば、次の 3 つのフィールドを持つ単純なオブジェクトをデータベース User に挿入firstname
しlastname
ますage
。
次に、単純に を呼び出しますsave()
。この時点では、実際にはデータベースへの挿入です。
ここまでは順調ですね。ここで、このユーザーを更新したいと思います。たとえば、年齢を変更します。この目的のために、QueryDSL や NamedQuery などのクエリを使用できます。しかし、単に spring-data-jpa と JPARepository を使用したいだけであることを考えると、挿入の代わりに更新を行いたいことをどのように伝えればよいでしょうか?
具体的には、同じユーザー名とファーストネームを持つユーザーが実際には EQUAL であり、既存のエンティティが更新されるはずであることを spring-data-jpa に伝えるにはどうすればよいですか? equals をオーバーライドしても、この問題は解決しませんでした。