ポンコツPdM

プロフィール画像

独立系のSIerに務めるSE,PM。 仕事の上で得たIT関連やプロジェクト運営関連の知識を書きます。 使用技術:Java,ウェブ関連全般,データベース全般 (どれも広く浅く)

Spring Data JPAのN+1問題を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアが大量SQLとJOINを調査するイラスト。

実装・エラー解決

2026/9/6

Spring Data JPAでSQLが大量に発行される原因|N+1問題の確認方法と対策

AIによる要約N+1問題は、一覧を取得する1本のSQLに加え、各行の関連Entityを読むたびに追加SQLが発行される状態です。件数が少ない開発環境では気づきにくく、本番データで急に遅くなります。SQLログで「似たSELECTがIDを変えて繰り返されていないか」を確認し、その画面で必要な関連だけをJOIN FETCH、@EntityGraph、DTO projectionなどでまとめて取得します。すべてをEAGERへ変える対策は避けます。 Spring Data JPAでは、Entity同士の関連をJav ...

SpringのComponent、Service、Repositoryの違いを解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがBeanの役割分担を学ぶイラスト。

実装・エラー解決

2026/9/6

Springの@Component・@Service・@Repositoryの違い|どれを付けるべき?

AIによる要約@Serviceと@Repositoryは、どちらも@Componentを土台にしたステレオタイプで、コンポーネントスキャンによりBean登録されます。違いは主に役割の表現です。業務処理はService、DBなどの永続化アクセスはRepository、どちらにも当てはまらない共通部品はComponentを基本にします。Repositoryにはデータアクセス例外変換の対象になる意味もあるため、全部をComponentへ統一しない方が設計意図を伝えられます。 Springのクラスへ@Compon ...

Spring BootのControllerとRestControllerの違いを解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがHTML画面とJSON APIを学ぶイラスト。

実装・エラー解決

2026/9/6

Spring Bootの@Controllerと@RestControllerの違い|画面とJSONで使い分ける

AIによる要約@Controllerは主にThymeleafなどの画面名を返し、@RestControllerは戻り値をレスポンス本文へ書き込みます。RestControllerはControllerとResponseBodyを組み合わせたアノテーションです。HTML画面とJSON APIをクラス単位で分け、HTTPステータスやヘッダーも返したいAPIではResponseEntityを使うと、戻り値の意図が分かりやすくなります。 Spring BootのWeb開発では、@Controllerと@RestC ...

Spring Data JPAでEntityが更新されない原因を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがトランザクションとUPDATEを学ぶイラスト。

実装・エラー解決

2026/9/6

Spring Data JPAでEntityを変更しても更新されない原因|@Transactionalとダーティチェック

AIによる要約JPAでは、トランザクション内で取得した管理対象Entityを変更すると、コミット時のダーティチェックでUPDATEされます。更新されない場合は、Serviceに有効な@Transactionalがあるか、変更したEntityが管理対象か、readOnlyになっていないか、例外でロールバックしていないかを確認します。saveを追加して隠す前に、取得から変更、コミットまでが同じトランザクションかを追うことが重要です。 Spring Data JPAを使い始めると、Repositoryで取得した ...

Spring BootでValidationメッセージが表示されない原因を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがth:errorsを確認するイラスト。

実装・エラー解決

2026/9/6

Spring Bootでバリデーションメッセージが表示されない原因|th:errorsとmessages.propertiesを確認

AIによる要約バリデーションメッセージが画面へ出ないときは、まずBindingResultにエラーが入っているかを確認します。エラーがあるのに表示されない場合は、Formの属性名、th:object、th:field、th:errorsの項目名を揃えます。メッセージキー、配置ファイル、リダイレクトの有無も確認し、Validationが動かない問題と画面表示だけの問題を分けて調査することが重要です。 Spring BootとThymeleafの入力画面では、Formに@NotBlankを付けただけではメッセ ...

Spring Bootの400 Bad Requestを切り分ける記事のアイキャッチ。Java道場風の空間で若手エンジニアがControllerとJSONのエラーを調査するイラスト。

実装・エラー解決

2026/9/6

Spring Bootで400 Bad Requestになる原因|Controllerに値が入らない時の確認順

AIによる要約Spring Bootの400 Bad Requestは、Controllerの処理へ入る前にリクエストの読み取りが失敗したときによく発生します。主な原因は必須パラメータ不足、数値や日付への型変換失敗、壊れたJSON、入力チェックエラーです。闇雲にアノテーションを追加せず、HTTPメソッド、URL、Content-Type、実際の送信値、例外名の順に確認すると切り分けやすくなります。 400 Bad Requestは「サーバーへ到達していない」という意味ではありません。Spring MVCま ...

JavaのBigDecimalで0.0と0.00を比較する方法を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがequalsとcompareToの違いを学ぶイラスト。

実装・エラー解決

2026/9/6

JavaのBigDecimalでequalsがfalseになる理由|0.0と0.00はcompareToで比較する?

AIによる要約BigDecimal.equalsは数値だけでなく小数点以下の桁数を表すscaleも比較するため、0.0と0.00はfalseになります。金額などを数値として比較するならcompareToの結果が0かを確認します。ただし、HashSetやHashMapはequalsとhashCodeを使うため、compareToへ置き換えればすべて解決するわけではありません。入力・保存・表示のどこで桁数を統一するかを業務ルールとして決めることが重要です。 販売管理や請求、会計連携などの業務システムでは、小数 ...

Spring BootのServiceをJUnitとMockitoでテストする方法を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがRepositoryのモックを学ぶイラスト。

設計・テスト・レビュー

2026/9/6

Spring BootのServiceをJUnit・Mockitoでテストする方法|Repositoryをモックする基本

AIによる要約Serviceの単体テストではSpring Boot全体を起動せず、JUnit 5とMockitoでRepositoryをモックします。@Mockで依存先を作り、@InjectMocksまたはコンストラクタでServiceへ渡し、戻り値だけでなく保存処理が正しい引数で呼ばれたかも確認します。成功ケース、対象なし、業務ルール違反を分けてテストし、DB制約やトランザクションは結合テストへ任せます。 Spring BootのServiceは、Repositoryからデータを取得し、条件を判定し、更 ...

Spring Bootで@RequestParamのバリデーションが効かない原因を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアがValidationとSpring MVCを学ぶイラスト。

実装・エラー解決

2026/9/6

Spring Bootで@RequestParamのバリデーションが効かない原因|@Validatedは必要?

AIによる要約@RequestParamへ@NotBlankや@Minを付けても効かないときは、Validation依存関係、Springのバージョン、例外の受け取り方を確認します。Spring Framework 6.1以降のSpring MVCにはControllerメソッドの検証機能があり、旧来のAOP方式で使うクラスレベルの@Validatedを外す方が適切な構成もあります。@Validだけでは制約にならず、BindingResultも単純なRequestParam検証の受け皿ではありません。 S ...

Spring Bootでapplication.propertiesを外部化する方法を解説する記事のアイキャッチ。Java道場風の空間で若手エンジニアが環境変数とProfileを学ぶイラスト。

実装・エラー解決

2026/9/6

Spring Bootでapplication.propertiesを外部化する方法|環境変数とProfileの優先順位

AIによる要約Spring Bootの設定は、jar内のapplication.propertiesへ本番値を直接書かず、環境変数やjar外の設定ファイルで上書きできます。開発・検証・本番の共通構造はProfileで分け、パスワードなどの秘密情報は環境変数やシークレット管理へ寄せます。外部ファイルを追加するspring.config.additional-locationと、既定の検索場所を置き換えるspring.config.locationの違いに注意が必要です。 Spring Bootでは、DB接続 ...