IT/JAVA

MyBatis Log4j Error

iamhyeon 2024. 10. 10. 18:03
### Error updating database.  Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for ProfessorMapper.insert

 

= 매핑된 컬렉션에 ProfessorMapper.insert 값이 포함되어 있지 않다

= ProfessorMapper 인터페이스에서 insert 메서드에 대한 매핑이 정의되어 있지 않다

 

원인 )
- MyBatis 설정에서 매핑 파일의 경로가 잘못되었거나, 매핑 파일이 로드되지 않았을 수 있다
- 매핑 파일에 정의된 ID와 인터페이스 메서드의 이름이 일치하지 않는 경우에 이 오류가 발생할 수 있다

    => Mapper의 기능명(id)와 Java소스 코드의 메서드명이 다른 경우

 

 

- java.lang.IllegalArgumentException은 Java에서 발생하는 unchecked exception의 하나로, 메서드나 함수가 잘못된 인자를 받았을 때 던져진다.

- 메서드가 요구하는 인자 값이 기대하는 범위나 형식에 맞지 않으면 이 예외가 발생한다
- 예외 발생 원인:
- 메서드가 요구하는 값의 범위를 벗어남 (예: 1~10 사이 값을 요구하지만 0이나 11을 전달)
- null 값을 허용하지 않는데, null 값이 전달됨
- 부적절한 형식의 값이 전달됨 (예: 문자열을 기대하지만 숫자를 전달)


   
<mappers>
        <mapper resource="mappers/DepartmentMapper.xml" />
        <mapper resource="mappers/ProfessorMapper.xml" />
        <mapper resource="mappers/StudentMapper.xml" />
    </mappers>
 
=> 매핑 파일 경로가 추가돼있지 않았다
( mappers/ProfessorMapper.xml 로 되어있어야 했는데, mappers/DepartmentMapper.xml 로 되어 있었다  )

 


 


 

### 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`))

### The error may exist in mappers/ProfessorMapper.xml
 
### The error may involve ProfessorMapper.insert-Inline
 
### The error occurred while setting parameters
 
### SQL: INSERT INTO professor (name, userid, position, sal, hiredate, comm, deptno) VALUES (?, ?, ?, ?, ?, ?, ?);

 

= 존재하지 않는 외래 키 값: 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>

 

=> 파라미터 타입의 클래스명 오타 

 

반응형

'IT > JAVA' 카테고리의 다른 글

Stream  (0) 2025.01.03
Java 란  (3) 2024.12.27
JDBC  (1) 2024.10.08
JDK 설치  (0) 2024.10.06
CRUD  (1) 2024.10.01