質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

1403閲覧

【SpringBoot】テーブルのレコードが複数行登録されてしまう症状を直したい

asahiko123

総合スコア43

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2021/07/28 03:55

前提・実現したいこと

個人で、SpringBoot,Thymeleaf,H2-DataBase,JDBCTemplateを使った基本的なCRUD機能を実装したアプリケーションを作っています。

その中に画面上で登録した情報をテーブル一覧表示させるセクションがあるのですが、
ここに意図しない複数のレコードが表示されてしまう状態が発生しており、これを修正したいです。
ローカルにデータファイルを作り、そこにデータを保存して永続化しようとしている作業の中で発生しました。


イメージ説明

今の状態(一回登録ボタンを押すと、同一のデータが何個も出てくる)
イメージ説明

この症状はアプリ再起動時(STSの停止ボタンを押してから再び実行した時)に現れます。
初回起動時はデータはひとつずつ反映されていくので、問題ありません。

発生している問題・エラーメッセージ

編集ボタンを押すと、IncorrectResultSizeDataAccessExceptionが出ているのがわかります。
ただresultSizeがなぜ増えてしまっているのかがわかりません。

This application has no explicit mapping for /error, so you are seeing this as a fallback. Wed Jul 28 12:04:10 JST 2021 There was an unexpected error (type=Internal Server Error, status=500). Incorrect result size: expected 1, actual 6 org.springframework.dao.IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 6

該当のソースコード

application.ymlに書いたh2-detabaseの設定です。
hogefiledb.mv.dbが生成されます。

spring: datasource: url: jdbc:h2:file:./hogefiledb driverClassName: org.h2.Driver username: sa password: h2.console.enabled: true

試したこと

一番左端の数字はAUTO_INCREMENTで取得したidですが、これがリセットされていないのが関係ある?
と考えて調べた結果、ALTER TABLE テーブル名 AUTO_INCREMENT = 1の記述を加えて削除メソッドの後に追加してみましたが、変化なし。

@Override public void resetNum(DailyReport dailyReport) { jdbcTemplate.update("ALTER TABLE `DAILYREPORT` AUTO_INCREMENT = 1"); }

これはH2consoleを開いてみたところですが、データが重複している様子はありませんでした。

イメージ説明

ネットで調べてもこの問題と類似の事例が見つけられなかったので質問させて頂きました。

データ永続化を行う前はこの問題は発生していなかったので、ソースコードに根本的な欠陥があるわけではない、と今のところ仮定してソースコードは省略しておりますが、見直すべきポイントのヒントを頂ければと思います。

補足情報(FW/ツールのバージョンなど)

Spring Tool Suits 4 4.10.0.RELEASE
java11
H2dataBase

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

データ取得の際に他テーブルとの内部結合を行っていましたが、このINNER JOINの仕様でレコードが複製されてしまう現象があるようです。今回の問題の原因はここにあった、ということで自己解決しました。

https://www.ipentec.com/document/sql-duplicate-records-with-join

投稿2021/07/28 04:50

asahiko123

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問