前提
MyBatisを用いてMySQLで作成したテーブルにデータをINSERT使用としています。
その際、MySQLでNOT NULL制約、Default値の設定をしたカラムにNULLを入れようとするとエラーが発生してしまいます。
NULLが禁止されているカラムにNULLを代入するとエラーが発生すると思いますが、
Default値を設定しているので代わりにその値が入るるためエラーは発生しないと認識してました。
どのような設定をすればDefault値が設定されるのでしょうか
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- MyBatisを用いてMySQLで作成したテーブルにデータをINSERTする
- NULLをINSERTした際に、Default値を設定したカラムはそのDefault値がNULLの代わりにINSERTされる
発生している問題・エラーメッセージ
作成したテーブルのACCOUNT_ICON(NOT NULL制約、Default値(/img/default.png))カラムにNULLをINSERT使用とすると、Default値を設定しているが、以下のエラーが表示されてしまう。
VERSIONカラムも同様の理由でエラーが発生してしまう。
### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'ACCOUNT_ICON' cannot be null
該当のソースコード
エンティティクラス
java
1package com.example.model; 2 3import com.example.util.Authority; 4 5import jakarta.persistence.Version; 6import lombok.Data; 7 8@Data 9public class MUser { 10 11 private String username; 12 private String password; 13 private String phoneNumber; 14 private String mailAddress; 15 private String address; 16 private Integer age; 17 private Integer gender; 18 private String accountIcon; 19 private Authority auth; 20 21 /* 排他制御を行うためのVersion列 */ 22 @Version 23 private Integer version; 24}
xmlに記述したSQL文
xml
1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 5<!-- Mapperとxmlのマッピング --> 6<mapper namespace="com.example.repository.SpringMySQLSampleMapper"> 7 <!-- マッピング定義(M_USER) --> 8 <resultMap type="com.example.model.MUser" id="muser"> 9 <id column="user_name" property="username" /> 10 <result column="password" property="password" /> 11 <result column="phone_number" property="phoneNumber" /> 12 <result column="mail_address" property="mainAddress" /> 13 <result column="address" property="address" /> 14 <result column="age" property="age" /> 15 <result column="gender" property="gender" /> 16 <result column="account_icon" property="accountIcon" /> 17 <result column="auth" property="auth" /> 18 <result column="version" property="version" /> 19 </resultMap> 20 21 <!-- ユーザー1件の登録 --> 22 <insert id="insertOne"> 23 INSERT INTO M_USER( 24 USER_NAME, 25 PASSWORD, 26 PHONE_NUMBER, 27 MAIL_ADDRESS, 28 ADDRESS, 29 AGE, 30 GENDER, 31 ACCOUNT_ICON, 32 AUTH, 33 VERSION 34 ) 35 VALUES( 36 #{username}, 37 #{password}, 38 #{phoneNumber}, 39 #{mailAddress}, 40 #{address, jdbcType=VARCHAR}, 41 #{age, jdbcType=INTEGER}, 42 #{gender, jdbcType=INTEGER}, 43 #{accountIcon, jdbcType=VARCHAR}, 44 #{auth}, 45 #{version} 46 ) 47 </insert> 48</mapper>
レポジトリークラス
java
1package com.example.repository; 2 3import org.apache.ibatis.annotations.Mapper; 4 5import com.example.model.MUser; 6 7@Mapper 8public interface SpringMySQLSampleMapper { 9 10 /* ユーザー登録 */ 11 public int insertOne(MUser user); 12}
試したこと
エラーの原因となっているカラムのNOT NULL制約を外してNULLを代入すると、Default値は設定されずそのままNULLがテーブルにINSERTされました。
補足情報(FW/ツールのバージョンなど)
Spring Boot 3.0.1
JRE 19
mybatis-spring-boot-starter 3.0.1
あなたの回答
tips
プレビュー