前提・実現したいこと
Spring Bootを用いて標準的なCRUD機能をもつアプリケーションを作っています。
問題はschema.sqlのテーブルに記述したAUTO_INCREMENTが機能してないらしい部分が
あり、これを復活させたいというものです。
発生している問題・エラーメッセージ
NULL not allowed for column "ID"; SQL statement: INSERT INTO DAILYREPORT(type_id,stuff_id,work_id,created,startTime,endTime,detail,name) VALUES(?,?,?,?,?,?,?,?) [23502-200]; nested exception is org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: 列 "ID" にはnull値が許されていません
該当のソースコード
schema.sql
CREATE TABLE IF NOT EXISTS DAILYREPORT( id INT(2) NOT NULL AUTO_INCREMENT, stuff_id INT(2) NOT NULL, work_id INT(2) NOT NULL, type_id INT(2) NOT NULL, created VARCHAR NOT NULL, startTime VARCHAR NOT NULL, endTime VARCHAR NOT NULL, detail VARCHAR(20) NOT NULL, name VARCHAR(20) NULL, PRIMARY KEY(id) ); CREATE TABLE IF NOT EXISTS DAILYREPORT_TYPE( id INT NOT NULL, progress VARCHAR NOT NULL );
Daoの情報をinsertする部分
public void insert(DailyReport dailyReport) { jdbcTemplate.update("INSERT INTO DAILYREPORT(type_id,stuff_id,work_id,created,startTime,endTime,detail,name) VALUES(?,?,?,?,?,?,?,?)", dailyReport.getTypeId(),dailyReport.getStuffId(),dailyReport.getWorkId(),dailyReport.getCreated(),dailyReport.getStartTime(),dailyReport.getEndTime(),dailyReport.getDetail(),dailyReport.getName()); }
data.sql ①
INSERT INTO `DAILYREPORT_TYPE` VALUES (1,'0%'), (2,'10%'), (3,'20%'), (4,'30%'), (5,'40%'), (6,'50%'), (7,'60%'), (8,'70%'), (9,'80%'), (10,'90%'), (11,'100%');
data.sql ②
INSERT INTO `DAILYREPORT_TYPE` ( `id` ,`progress` ) SELECT `id`, `progress` FROM ( SELECT 1 AS `id`, '0%' AS `progress` FROM dual UNION ALL SELECT 2 AS `id`, '10%' AS `progress` FROM dual UNION ALL SELECT 3 AS `id`, '20%' AS `progress` FROM dual UNION ALL SELECT 4 AS `id`, '30%' AS `progress` FROM dual UNION ALL SELECT 5 AS `id`, '40%' AS `progress` FROM dual UNION ALL SELECT 6 AS `id`, '50%' AS `progress` FROM dual UNION ALL SELECT 7 AS `id`, '60%' AS `progress` FROM dual UNION ALL SELECT 8 AS `id`, '70%' AS `progress` FROM dual UNION ALL SELECT 9 AS `id`, '80%' AS `progress` FROM dual UNION ALL SELECT 10 AS `id`, '90%' AS `progress` FROM dual UNION ALL SELECT 11 AS `id`, '100%' AS `progress` FROM dual ) WHERE NOT EXISTS ( SELECT `id` FROM `DAILYREPORT_TYPE` WHERE `progress` = '0%' OR `progress` = '10%' OR `progress` = '20%' OR `progress` ='30%' OR `progress` ='40%' OR `progress` ='50%' OR `progress` ='60%' OR `progress` ='70%' OR `progress` ='80%' OR `progress` ='90%' OR `progress` ='100%' );
試したこと
INSERT INTO DAILYREPORT~の部分がエラーとして表示されてますが、schema.sqlのテーブルでIDをAUTO_INCREMENTしているのでINSERTには含めないでいいはず...と思っています。しかしIDがNULLということはテーブルの自動採番が機能してないということです。
この問題は①のテーブルを②に変更したことで生じました、、
なのでこの問題の原因はこの変更にあるような気がしますが
この予測は正しいでしょうか?
DAILYREPORT_TYPEというテーブルはDAILYREPORTテーブルと内部結合します。
String sql = "SELECT DISTINCT DAILYREPORT.id, stuff_id, work_id, DAILYREPORT.type_id,stuff_id, created, startTime, endTime, DAILYREPORT.detail, DAILYREPORT.name," + " progress , registeredId ,workDivId FROM DAILYREPORT " + " INNER JOIN DAILYREPORT_TYPE ON DAILYREPORT_TYPE.id = DAILYREPORT.type_id"
補足情報(FW/ツールのバージョンなど)
Spring Tool Suite 4-4.10.0.release
H2 database
Spring Boot v2.5.0
java11
回答1件
あなたの回答
tips
プレビュー