= 매핑된 컬렉션에 ProfessorMapper.insert 값이 포함되어 있지 않다
= ProfessorMapper 인터페이스에서 insert 메서드에 대한 매핑이 정의되어 있지 않다
원인 )
- MyBatis 설정에서 매핑 파일의 경로가 잘못되었거나, 매핑 파일이 로드되지 않았을 수 있다
- 매핑 파일에 정의된 ID와 인터페이스 메서드의 이름이 일치하지 않는 경우에 이 오류가 발생할 수 있다
=> Mapper의 기능명(id)와 Java소스 코드의 메서드명이 다른 경우
- java.lang.IllegalArgumentException은 Java에서 발생하는 unchecked exception의 하나로, 메서드나 함수가 잘못된 인자를 받았을 때 던져진다.
- 메서드가 요구하는 인자 값이 기대하는 범위나 형식에 맞지 않으면 이 예외가 발생한다
- 예외 발생 원인:
- 메서드가 요구하는 값의 범위를 벗어남 (예: 1~10 사이 값을 요구하지만 0이나 11을 전달)
- null 값을 허용하지 않는데, null 값이 전달됨
- 부적절한 형식의 값이 전달됨 (예: 문자열을 기대하지만 숫자를 전달)

### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`myschool`.`professor`, CONSTRAINT `fk_professor_department` FOREIGN KEY (`deptno`) REFERENCES `department` (`deptno`))
= 존재하지 않는 외래 키 값: professor 테이블에 데이터를 삽입할 때 deptno 값이 department 테이블에 존재하지 않는 경우
=> professor 테이블의 deptno 컬럼에 입력하려는 값이 department 테이블의 deptno 컬럼에 존재해야 한다
= 부서 데이터 누락: department 테이블에 해당 부서(deptno)에 대한 데이터가 없는 경우
=> 부서 데이터 확인: department 테이블에 deptno 값이 존재하는지 확인한다
=> 부서 데이터 삽입: 만약 department 테이블에 해당 부서가 없다면, 먼저 부서 데이터를 삽입해야 한다
java.sql.SQLIntegrityConstraintViolationException
- Java에서 데이터베이스와 관련된 제약 조건을 위반할 때 발생하는 예외이다
- 주로 SQL에서 무결성 제약 조건(integrity constraint)이 위반되었을 때 발생한다
Exception in thread "main" java.lang.ExceptionInInitializerError at com.hyeon.student_ex.App01.main(App01.java:50)
Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### The error may exist in mappers/StudentMapper.xml
### The error occurred while processing mapper_resultMap[student]
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mappers/StudentMapper.xml'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.hyeon.models.Studnet'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.hyeon.models.Studnet
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:52)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:36)
at com.hyeon.MyBatisConnectionFactory.<clinit>(MyBatisConnectionFactory.java:29)
... 1 more
......................
java.lang.ExceptionInInitializerError
- 클래스의 static 초기화 블록이나 static 필드 초기화에서 예외가 발생할 때
- 프로그램이 시작되는 시점에서 잘못된 초기화로 인해 발생하는 에러
org.apache.ibatis.exceptions.PersistenceException:
- MyBatis에서 SQL 세션을 생성하는 도중 오류가 발생
- SqlSessionFactory를 생성하는 과정에서 문제가 발생
TypeException: Could not resolve type alias 'com.hyeon.models.Studnet':
- com.hyeon.models.Studnet의 타입 별칭을 해결할 수 없다는 오류
- MyBatis가 해당 클래스를 찾지 못하고 있다는 의미
- 클래스 이름 확인 / 패키지 선언 확인 / MyBatis 설정 확인
- MyBatis XML 매퍼 파일에서 com.hyeon.models.Studnet 클래스를 참조하고 있지만, 이 클래스가 존재하지 않거나 이름이 잘못되었다
java.lang.ClassNotFoundException: Cannot find class: com.hyeon.models.Studnet
- MyBatis가 해당 클래스를 찾지 못하고 있다
- 클래스 이름 확인
- 패키지 구조 확인: 클래스가 실제로 com.hyeon.models 패키지에 존재하는지 확인
- 프로젝트 빌드: IDE에서 소스 코드가 제대로 빌드되었는지 확인. Clean and Build 또는 Rebuild Project 기능을 사용해 보기
<insert id="insert"
parameterType="com.hyeon.models.Studnet"
useGeneratedKeys="true"
keyProperty="studno"><!--자동증가 일련번호 컬럼명-->
INSERT INTO student (name, userid, grade, idnum, birthdate, tel, height, weight, deptno, profno) VALUES (#{name}, #{userid}, #{grade}, #{idnum}, #{birthdate}, #{tel}, #{height}, #{weight}, #{deptno}, #{profno});
</insert>
=> 파라미터 타입의 클래스명 오타