前提・実現したいこと
前提として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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/26 02:24