問題タブ [spring-boot-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 - Spring JPA の多対 1 アソシエーションが関連エンティティを更新しない
多対一の関連付けを使用して DB に JPA エンティティを挿入する際に問題があります。
私は使用しています:
- スプリング ブート 2.1.4.RELEASE
- Ecliselink 2.7.4.RC2 (org.eclipse.persistence.jpa)
- spring-boot-starter-data-jpa
私はSpringのリポジトリを使用しています.saveメソッドしかなく、insert、merge、updateメソッドはありません。
DbWatchlist
別のエンティティとの多対 1 の関連付けを持つエンティティを使用していますDbWatchlistProvider
。
塗りつぶされDBWatchlist
たフィールドで新しいものを作成すると、すべて正常に機能します。DbWatchlistProvider
また、既存のフィールドを変更し、DbWatchlist
ここでもフィールドを変更DbWatchlistProvider
して、すべてを保存すると機能します。
しかしDbWatchlist
、既存のDbWatchlistProvider
JPA で新しいレコードを作成しようとすると、常に新しいレコードを挿入しようとしDbWatchlistProvider
ます。
DbWatchlistProvider
エンティティに挿入する前にデータベースからを読み込もうとしましたがDbWatchlist
、その後保存を行いましたが、ここでも INSERT が行われました。これにより、例外が発生します。
私のコード:
私のテストでは、次のことを試しました。
最後の保存まで、すべてがエラーなしで機能しており、期待どおりです。DbWatchlistProvider
何が問題なのか、なぜ挿入しようとしているのに更新されないのか、誰かに何か考えがありますか?
例外は次のとおりです。
mysql - JPA リポジトリを使用して、Mysql ビューからデータをプル/フェッチできますか? はいの場合、どのように?
JPARepository を使用してデータをフェッチするテーブルがたくさんあります。次に、MySql - View で作成し、JPARepository を使用して findAll を実行しようとしましたが、機能していません。
spring-boot - @DataJpaTest @SpringBootTest を 1 つの MVC アプリケーションで組み合わせて、すべてのレイヤーをテストするにはどうすればよいですか?
ここhttps://stackoverflow.com/a/52968130/10894456 では、 @DataJpaTest @SpringBootTest を 1 つのアプリケーションに混在させてはならない理由がよく説明されています。
しかし、とにかく MVC SpringBoot アプリケーションのすべてのレイヤーをテストする必要があるケースについてはほとんど説明しませんでした (私の考えでは、1 つまたは別のレイヤーだけでなく、両方、さらにはすべてのレイヤーをテストするのは自然なことですよね?)
そのため、@DataJpaTest ではなく @AutoConfigureTestDatabase を使用する解決策が提案されましたが、ジョブは完了しませんでした (((
私の質問は次のとおりです。 @AutoConfigureTestDatabase を使用するのは適切な解決策ですか? はいの場合、詳細を説明してください。いいえの場合は、より適切な解決策を提案してください、ありがとう
java - Spring CrudRepository 保存メソッドのカスタム戻り値の型 (動的射影)
CrudRepository
検索クエリ メソッドの次の例のように、Spring の save メソッドのカスタム戻り値の型を定義できるかどうか疑問に思っています。
ドキュメントでは、クエリ メソッドを使用した動的プロジェクションの例しか見つかりませんでした。
私は試した
しかし、次のエラーが発生します。
これを機能させる方法はありますか?
java - 集計値のSpring Boot jpaクエリビルダー?
集計値を出力するカスタマイズ可能なクエリを作成したいと考えています。クエリを取得して実行する 3 つの方法を知っていますが、どれも十分ではないようです。作成したいクエリは次のようになります。
tldr: 1 と 2 をスキップします。
- 文字列としての SQL
private NamedParameterJdbcTemplate template; template.query("select ..." , new MapSqlParameterSource("...", "...") , rs -> {...rs.getString("minprice")...
- 長所: クエリから結果にアクセスできます
- 短所: クエリ ビルダーを使用していません。"select..." 文字列を自分で作成する必要があります。
- リポジトリの使用
public interface MytableRepository extends CrudRepository<Mytable, Integer> { @Query("Select ...") public List<Object[]> findMinMaxPrice(@Param("myParam") String myParam);
- 長所: クエリから結果にアクセスできます。
- 短所: クエリがハードコーディングされている
- クエリ ビルダーの使用
Specification<MyTable> spec = Specifications.<>where((mytable, query, cb) -> { Predicate sql = cb.equal(mytable.get("k"), "v"; return sql; } List<Mytable> result = myJpaSpecificationExecutor.findall(spec);
- 長所:クエリビルダーを使用しています
- 短所: クエリは groupBy を使用していません。groupBy クエリはクラスのレコードでは
Mytable
なく集計値を返すため、これを機能させる方法がわかりません。から選択を開始するMytable
ので、それを型パラメーター to として使用する必要があると思いますがSpecification
、それはすぐに結果も型MyTable
にする必要があることを意味しますね。
柔軟な結果タイプでクエリビルダーを使用するにはどうすればよいですか?