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

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

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

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

Java

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

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Spring Boot

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

Q&A

解決済

1回答

2556閲覧

外部キー制約が失敗します (追加機能の作成)

Kwinter

総合スコア5

MySQL

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

Java

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

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Spring Boot

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

0グッド

0クリップ

投稿2021/07/26 00:59

前提・実現したいこと

前提としてSpringbootを使用してメルマガ機能を作成しており、
現在は、顧客の追加機能を作成しています。

実現したいこととしては、外部キー制約を使用した状態での追加機能です。

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

機能の内容として、 まず、メルマガの中にテーマがあり、テーマごとにメールを作成できます。 そのテーマの中に「theme_id」があり、顧客情報の中にも「theme_id」があり、そのカラムを参照しています。 親がthemeというテーブルで、子がcustomerというテーブルです。 問題としては、外部キー制約が使われている状態での追加(insert)ができない状態です。 エラーメッセージとして、 java.sql.SQLIntegrityConstraintViolationException:子行を追加または更新できません:外部キー制約が失敗します エラーにはdefaultParameterMapが含まれる可能性があります パラメータの設定中にエラーが発生しました と出ている状態です。 原因がわかる方がいれば教えてほしいです。 説明が下手で申し訳ございません。

該当のソースコード

Controller (一部抜粋)

java

1 2 @GetMapping("customer_create") 3 public String newcustomer(@ModelAttribute("customer") Customer customer, Model model) { 4 model.addAttribute("customer",new Customer()); 5 return "customer_create"; 6 } 7 8 9 @RequestMapping("/customerlist") 10 public String create(@ModelAttribute("customer") @Validated Customer customer, BindingResult result, Model model) { 11 if (result.hasErrors()) { 12 return "customer_create"; 13 } else { 14 15 LocalDate nowDate = LocalDate.now(); 16 customer.setTheme_id(0); 17 customer.setCustomer_address("a"); 18 customer.setCustomer_company("a"); 19 customer.setCustomer_place("a"); 20 customer.setCustomer_name("a"); 21 customer.setMail_last_send("a"); 22 customer.setMail_send_err(0); 23 customer.setInsert_date(nowDate); 24 customer.setUpdate_date(nowDate); 25 26 userService.save(customer); 27 return "redirect:/customerlist"; 28 } 29 }

Mapper (一部抜粋)

java

1 /** 顧客情報の追加 */ 2 void save(Customer customer);

Service (一部抜粋)

java

1 @Transactional 2 public void save(Customer customer) { 3 userMapper.save(customer); 4 } 5

入力画面

html

1<body> 2 <div layout:fragment="contents"> 3 4 <div class="text-center"> 5 6 <h2>顧客追加</h2> 7 </div> 8 9 <strong style="float: right">※ 必須項目</strong> 10 <form th:method="post" th:action="@{/mailtool2/customerlist}" th:object="${customer}"> 11 <table class="table table-bordered"> 12 13<!-- テーマIDを選択し、整合性を保つ --> 14 <tr> 15 <td>テーマID</td> 16 <td><select name="theme" th:field="*{theme_id}"> 17 <option th:value="1">1</option> 18 <option th:value="2">2</option> 19 <option th:value="3">3</option> 20 <option th:value="4">4</option> 21 <option th:value="5">5</option> 22 </select></td> 23 </tr> 24 25 26 27 <tr> 28 <td>メールアドレス <strong></strong></td> 29 <td><input type="email" id="customer_address" 30 name="customer_address" placeholder="例) sample@mail.com" required 31 th:value="*{customer_address}" /></td> 32 </tr> 33 <tr> 34 <td>会社名</td> 35 <td><input type="text" name="customer_company" 36 placeholder="例) 株式会社サンプル" th:value="*{customer_company}" /></td> 37 </tr> 38 <tr> 39 <td>部署</td> 40 <td><input type="text" name="customer_place" 41 placeholder="例) 営業部" th:value="*{customer_place}" /></td> 42 </tr> 43 <tr> 44 <td>氏名 <strong></strong></td> 45 <td><input type="text" name="customer_name" 46 placeholder="例) 田中 太郎" required th:value="*{customer_name}" /></td> 47 </tr> 48 </table> 49 <br> <br> 50 51 <button class="btn btn-success float-right">新規追加</button> 52 </form> 53 </div> 54</body> 55

sql

1/** テーマの情報 */ 2create table IF NOT EXISTS `mail_db`.`theme` ( 3`theme_id` int(50) primary key auto_increment , 4`client_id` int(30) not null, 5`theme_name`varchar(50) not null, 6`mail_signature` text, 7`mail_shipment_name`varchar(20) not null, 8`mail_shipment_mailaddress` varchar(30) not null, 9`mail_stop_url_flag` int(1) not null, 10`mail_mode` tinyint(1) not null, 11`insert_date` datetime not null, 12`update_date` datetime not null, 13foreign key (`client_id`) 14references `client`(`client_id`) 15on delete cascade on update cascade 16); 17 18 19 20

sql

1create table IF NOT EXISTS `mail_db`.`customer`( 2`customer_id` int(10) primary key auto_increment, 3`theme_id` int(50) not null, 4`customer_address` varchar(30) not null, 5`customer_company` varchar(30) , 6`customer_place` varchar(20) , 7`customer_name` varchar(30) not null, 8`mail_last_send` varchar(255), 9`mail_send_err` tinyint(1) not null, 10`insert_date` datetime not null, 11`update_date` datetime not null, 12foreign key (`theme_id`) 13references `theme`(`theme_id`) 14on delete cascade on update cascade 15); 16

xml

1 <insert id="save" useGeneratedKeys="true" keyProperty="id" > 2 insert into customer(theme_id, 3 customer_address,customer_company, 4 customer_place,customer_name, 5 mail_last_send,mail_send_err, 6 insert_date,update_date) 7 8 values (#{theme_id}, #{customer_address},#{customer_company}, #{customer_place},#{customer_name}, 9 #{mail_last_send},#{mail_send_err},#{insert_date},#{update_date}); 10 </insert>

試したこと

ソースコードの見直しや、多くのサイトなど参考にしました。

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

MySQL8.0
Springboot2.5.2
mybatis2.2.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーからは、追加するcustomer.theme_idがNullまたは、theme.theme_idに登録が無いという事だと思います。

投稿2021/07/26 02:11

sazi

総合スコア25195

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

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

Kwinter

2021/07/26 02:24

回答ありがとうございました。 無事解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問