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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Thymeleaf

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

Spring Boot

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

Q&A

解決済

2回答

3292閲覧

SpringBoot、ThymleafでDBの更新処理が、updateではなくinsertになってしまう。

kazu5942

総合スコア6

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Thymeleaf

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

Spring Boot

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

0グッド

0クリップ

投稿2020/08/26 08:24

編集2020/08/26 08:45

前提・実現したいこと

SpringBootを持ちいて、DBのレコードの編集を行いたいのですが、saveAndFlushを行った際に、
updateではなくinsertの処理がはしってしまいます。行いたいのはレコードの更新なのですが、追加が行われてしまっている状況です。SpringBootを初めたばかりなので、原因がいまいちつかめずにいます。ご教授いただけますと幸いです。

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

saveAndFlushを行った際に、新しいデータが追加されてします。

該当のContoroller

@RequestMapping(value = "/updateDeployment", method = RequestMethod.POST) @Transactional(readOnly = false) public ModelAndView update(@ModelAttribute DeploymentEntity deploymentData, ModelAndView mav) { Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); // 日時情報を指定フォーマットの文字列で取得 String display = format.format(date); deploymentData.setEdit_date(display); UserEntity loginEmp = (UserEntity) ses.getAttribute("loginEmp"); deploymentData.setEditor_id(loginEmp.getId()); rep.saveAndFlush(deploymentData); return new ModelAndView("redirect:/depTop"); }

該当のThymeleaf

<div class="container my-5"> <div class="mt-5 mb-5"> <!-- タイトル--> <div class="title mb-5"> <h2 class="text-center">部署情報編集</h2> </div> </div> <form class="needs-validation" th:action="@{/updateDeployment}" method="POST" th:object="${deploymentData}"> <div class="mb-3 w-25 mx-auto" style="width: 200px;"> <input type="hidden" name="deployment_id" th:value="*{id}" form="edit"></input> <input type="text" class="form-control" name="deployment_name" th:value="*{deployment_name}"> </div> <div class="invalid-feedback">入力してください</div> <p class="text-center mb-5"> <input type="submit" class="btn btn-primary" value="編集完了"></input> </p> </form> </div>

追加情報

修正依頼いただき誠にありがとうございます。説明不足で申し訳ございません。
repに関しては、
@Autowired
DeploymentRepository rep;
になります。

該当のRepository

@Repository public interface DeploymentRepository extends JpaRepository<DeploymentEntity, Long> { public Optional<DeploymentEntity> findById(int i); @Query(value = "SELECT * FROM m_deployment WHERE delete_flag=0", nativeQuery = true) ArrayList<DeploymentEntity> findDeploymentByDeleteFlag(); public Optional<DeploymentEntity> findByDeploymentName(String depNmae); }

テーブルDDL

create table m_deployment (
deployment_id INT AUTO_INCREMENT not null comment '部署ID'
, deployment_name VARCHAR(50) UNIQUE not null comment '部署名'
, register_date DATETIME comment '登録日'
, register_id INT comment '登録者ID'
, edit_date DATETIME comment '編集日'
, editer_id INT comment '編集者ID'
, delete_flag INT comment '削除フラグ'
, delete_date DATETIME comment '削除日'
, deleter_id INT comment '削除者ID'
, sort_num INT comment '並び順'
, constraint m_deployment_PKC primary key (deployment_id)
) comment '部署テーブル' ;

試したこと

主キーとしているidに問題があると考え、<input type="hidden" name="deployment_id" th:value="*{id}" form="edit">を追加などしましたが、うまくいきませんでした。
なにとぞよろしくお願いいたします。

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

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

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

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

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

m.ts10806

2020/08/26 08:31

rep とは何でしょうか。 あと、テーブル定義を提示してください。
kazu5942

2020/08/26 08:46

返信いただき誠にありがとうございます。情報を追加させていただきました。 何卒宜しくお願い致します。
guest

回答2

0

<input type="hidden" name="deployment_id" th:field="*{id}" form="edit"></input>にすることで、データの受け渡しができ、解決しました。

投稿2020/08/28 01:15

kazu5942

総合スコア6

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

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

0

ベストアンサー

「編集」としたら、PKを指定しないといけないのではないでしょうか。
定義上はdeployment_idのようですが、
Editor_idEdit_dateしか指定されているように見えません。

というかDB定義とEntityの定義でスペルが違うのも気になりますし、
DB:editer_id  Entity:Editor_id

処理結果にあまり影響はないと思いますが、本来だとEditorId,EditDateのような名称にするのが命名規則ではと。

投稿2020/08/26 08:51

m.ts10806

総合スコア80875

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

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

kazu5942

2020/08/26 09:02

ご回答いただきましてまことにありがとうございます。命名規則に関してご指摘いただきましてありがとうございます。そういった細かいところも気を配れるようにしてまいります。 PKを指定というのは、Controller内で、 deploymentData.setEdit_date(編集したいレコードの主キー); のようにsetしてからsaveAndFlushを行うという認識でよろしかったでしょうか?
m.ts10806

2020/08/26 09:42

あ、失礼。formタグないにありましたね。deployment_id。 それらは正しく渡ってきてますか? デバッグしてください。 ちなみに命名規則云々は「ルール」なので、気を配る以前に、コーディング上の基本的な概念なので… フレームワーク使うのでしたら好き勝手組むより意味を持つようになります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問