問題タブ [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.

0 投票する
4 に答える
5952 参照

spring - Spring JPAでページングされたQueryDSLクエリを実行するにはどうすればよいですか?

QueryDSLは、またはOrderSpecifierを呼び出すことにより、任意のフィールドで簡単に取得できるインターフェースとインスタンスを定義します。Spring Data JPAのインターフェースには、パラメーターとしてsをとるメソッドもあります。asc()desc()QueryDslPredicateExecutorfindAll()OrderSpecifier

org.springframework.data.domain.PageRequestただし、QueryDSLについては何も知らず、クエリの並べ替え順序を定義する独自の方法がありますorg.springframework.data.domain.Sort。型安全性などではないことを除けば、sにorg.springframework.data.domain.Sort.Orderよく似た多数のsを含めることができます。OrderSpecifier

それで、ソートを使用するページクエリを作成したい場合、それを定義するためにQueryDSLを使用する方法は本当にありませんか?

0 投票する
4 に答える
3997 参照

eclipselink - Eclipselink & Spring データ

eclipselink (2.4.0) と spring-data-jpa (1.1.0.RELEASE) の組み合わせを使用してソリューションを実装しようとしています。ただし、ソリューション (Tomcat 7) をデプロイするたびに、次の例外が発生します。

これは、リポジトリのオートワイヤリングが行われたときに発生するようです (以下のコード例)。

サービスクラス

エンティティ クラス

persistence.xml

これは、春と eclipselink の間の競合が原因でしょうか?

アップデート:

スタックトレース...

0 投票する
1 に答える
3396 参照

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 に展開

0 投票する
1 に答える
1425 参照

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つのリポジトリを持っています:

ただし、ビルドすると次のエラーが発生します。

これは非常に単純なマッピング方法のように思えますが、私が見た例はすべて双方向です。それでも、なぜこれが機能しないのかわかりません。

0 投票する
2 に答える
6843 参照

spring - 春のデータ + 休止状態

Spring Data と Hibernate を使用していますが、セット ID でエンティティを保存しようとするとエラーが発生します。

JpaRepositories を介してエンティティを更新する方法を教えてください。または、どの設定を見逃していますか?

persistence.xml:

春のコンテキスト:

別のプロジェクトで OpenJpa を使用しましたが、そのような問題はありませんでした。エンティティに ID が設定されている場合、「保存」メソッドは作成および更新を行いました。では、どうすればオブジェクトを更新できますか? 独自の更新方法を実装する必要がありますか?

失敗したテスト:

0 投票する
1 に答える
1538 参照

hql - 春のデータクエリ

これが私のコードです。最初の方法は正常に機能しますが、2番目の方法は機能しません。誰かがそれを正しくする方法を教えてもらえますか?

0 投票する
1 に答える
3813 参照

spring-data - 複数のテーブルからのデータの管理SpringdataJPA

アプリケーションでSpringDataJPAを使用する場合、通常はエンティティ(@Entity)を定義し、リポジトリインターフェイス(CrudRepositoryを拡張する)を記述して、この質問の範囲外の追加の設定を行います。

例えば、

上記のような複数のエンティティがあり、searchByProductAndUserAndLocationのようなサービスAPIを設計する必要がある場合(3つすべてがデータベーステーブルであるとしましょう)、SpringデータJPAでこれをどのように行う必要がありますか?数量/コストのエンティティクラスも作成するとします。明らかに、(外部キーを使用して)いくつかの基準でテーブルを結合する必要がありますが、ここには特定の所有者リポジトリ/クラスがないと感じているため、どのリポジトリがそのようなクエリを保持する必要があるかがわかりません。

また、ProductService、LocationServiceなどでデータを公開し、結果を組み合わせることができますが、データベースレイヤーの結合やその他の最適化を利用して、最終的にアプリケーションのパフォーマンスに影響を与えることはありません。

これは非常に一般的なユースケースであると確信していますが、これの一般的な方法は何ですか?

前もって感謝します。

0 投票する
2 に答える
2742 参照

java - オブジェクトが永続コンテキストにない場合、Hibernate マージは DB にクエリを実行しません

私は使用しています:

  1. 春 3.1
  2. 春のデータ JPA 1.1
  3. 休止状態 4.1

私は問題があります。標準の Spring Data JPA DAO があります。

Dnarコードは次のとおりです。

実装クラスの例:

また、Hibernate 用の Spring 構成は次のとおりです。

ラウンド 1 - 問題

DAO のクライアントは次のDnarManagerImplクラスです。

上記のコードは機能しますが、常にデータベースに新しいdnar行が作成されます。Spring Data JPA コードをデバッグしましたが、正しく動作しているようです。たとえば、同じオブジェクトを 3 回保存すると、Hibernate の呼び出しは次のようになります。

  1. getSession().persist(entity);
  2. getSession().merge(entity);
  3. getSession().merge(entity);

上記に対して Hibernate が出力する SQL は次のとおりです。

  1. に挿入...
  2. に挿入...
  3. に挿入...

ラウンド 2 - ハッキングの修正

少し実験した結果、 を使用して、このエンティティが存在することを現在のセッションに伝えることができることがわかりましたdnarDao.findOne(id);。そして、これは私の問題を解決します:

ここでも、Hibernate セッションの呼び出しは次のとおりです。

  1. getSession().persist(entity);
  2. getSession().merge(entity);
  3. getSession().merge(entity);

Hibernate が出力する SQL は正しいものになりました。

  1. に挿入...
  2. アップデート ...
  3. アップデート ...

質問

Hibernate docsによると、これはどのように機能するかmerge()です:

  1. 永続化コンテキストに現在関連付けられている同じ識別子を持つマネージド インスタンスがある場合は、指定されたオブジェクトの状態をマネージド インスタンスにコピーします。
  2. 永続化コンテキストに現在関連付けられているマネージド インスタンスがない場合は、データベースからの読み込みを試みるか、新しいマネージド インスタンスを作成します。
  3. マネージド インスタンスが返される
  4. 指定されたインスタンスは永続コンテキストに関連付けられず、切り離されたままになり、通常は破棄されます

明らかに、私の例では、項目 2 は発生していません。Hibernate はデータベースからこのエンティティを読み込もうとしていません。Hibernateが選択を出力することはありません(私のハック修正では例外です)。すっごく....どこが間違っているのですか?Hibernate はドキュメントどおりに動作すると確信していますが、それは私が何かばかげたことをしただけです。

0 投票する
14 に答える
215912 参照

java - SpringDataJPAにカスタムメソッドを追加する方法

SpringDataJPAを調べています。以下の例を考えてみましょう。ここでは、すべてのクラッドとファインダーの機能がデフォルトで機能します。ファインダーをカスタマイズしたい場合は、インターフェース自体でも簡単に実行できます。

上記のAccountRepositoryの実装で完全なカスタムメソッドを追加するにはどうすればよいですか?そのインターフェースなので、そこにメソッドを実装することはできません。

0 投票する
12 に答える
597929 参照

java - spring-data-jpa を使用してエンティティを更新するにはどうすればよいですか?

まあ、質問はほとんどすべてを言っています。JPARepository を使用してエンティティを更新するにはどうすればよいですか?

JPARepository にはsaveメソッドしかなく、実際に create なのか update なのかわかりません。たとえば、次の 3 つのフィールドを持つ単純なオブジェクトをデータベース User に挿入firstnamelastnameますage

次に、単純に を呼び出しますsave()。この時点では、実際にはデータベースへの挿入です。

ここまでは順調ですね。ここで、このユーザーを更新したいと思います。たとえば、年齢を変更します。この目的のために、QueryDSL や NamedQuery などのクエリを使用できます。しかし、単に spring-data-jpa と JPARepository を使用したいだけであることを考えると、挿入の代わりに更新を行いたいことをどのように伝えればよいでしょうか?

具体的には、同じユーザー名とファーストネームを持つユーザーが実際には EQUAL であり、既存のエンティティが更新されるはずであることを spring-data-jpa に伝えるにはどうすればよいですか? equals をオーバーライドしても、この問題は解決しませんでした。