본문 바로가기

코딩 학원(국비지원)/코딩 팀프로젝트

게시판 댓글 기능 구현하기. 댓글 오류 발생.

반응형

댓글 기능 구현하기 순서

1. 댓글 모델 (Model) 설계: 댓글의 데이터를 담을 댓글 모델(DTO)을 정의. 댓글의 내용, 작성자, 작성일자 등을 포함.

2. 댓글 컨트롤러 (Controller) 작성: 댓글과 관련된 요청을 처리할 댓글 컨트롤러를 작성합니다. 댓글 작성, 조회, 수정, 삭제 등의 기능을 처리하는 메서드를 구현.

3. 댓글 매퍼 (Mapper) 작성: 댓글 데이터를 데이터베이스와 연동하기 위한 댓글 매퍼를 작성. MyBatis를 사용하여 데이터베이스와의 상호 작용을 담당하는 SQL 쿼리를 작성.

4. 댓글 DAO (Data Access Object) 작성: 댓글 매퍼와 컨트롤러 사이에서 데이터 액세스를 처리하기 위한 댓글 DAO를 작성. 댓글 매퍼와의 연결 및 데이터 액세스 메서드를 구현.

5. 댓글 서비스 (Service) 작성: 댓글 관련 비즈니스 로직을 처리하기 위한 댓글 서비스를 작성. 댓글 작성, 조회, 수정, 삭제 등의 기능을 구현하고, 필요에 따라 트랜잭션 관리 등을 처리.

6. 뷰 (View) 작성: 사용자에게 댓글을 보여주기 위한 뷰 템플릿을 작성합니다. 댓글 목록을 출력하는 템플릿, 댓글 작성 폼, 댓글 수정 폼 등을 작성.

 


5/23 

댓글 기능을 구현 중인데 장애물을 만났다. 로그인하지 않은 상태로 댓글을 달면 로그인 화면으로 이동하도록 만드는데 계속 error 팝업창만 나온다. 

@PostMapping("/comments/{post_id}")
	public String createComment(@PathVariable("post_id") Integer post_id, @RequestBody CommentDTO commentDTO, HttpSession session) {
	    MemberDto member = (MemberDto) session.getAttribute("member");
	    if (member != null) {
	        String user_email = member.getUser_email();
	        if (user_email != null) {
	            commentDTO.setUser_email(user_email);
	            
	            try {
	                if (comuService.comment(commentDTO) == 1) {
	                    return "redirect:/login";  // 로그인 화면으로 리다이렉트
	                } else {
	                    return "Failed to create comment";
	                }
	            } catch (Exception e) {
	                e.printStackTrace();
	                return "Failed to create comment";
	            }
	        }
	    }
		return null;
	}

 

오류 : 

org.springframework.dao.DataIntegrityViolationException: 
### Error updating database.  Cause: org.postgresql.util.PSQLException: ERROR: null value in column "cmt_content" of relation "tb_comment" violates not-null constraint
  Detail: Failing row contains (6, 6, null, 2023-05-23, null).
### The error may exist in file [C:\workspace-spring\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\TeamProject\WEB-INF\classes\mapper\ComuMapper.xml]
### The error may involve com.earth.mapper.ComuMapper.comment-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO tb_comment    (cmt_content)    VALUES(?)
### Cause: org.postgresql.util.PSQLException: ERROR: null value in column "cmt_content" of relation "tb_comment" violates not-null constraint
  Detail: Failing row contains (6, 6, null, 2023-05-23, null).
; ERROR: null value in column "cmt_content" of relation "tb_comment" violates not-null constraint
  Detail: Failing row contains (6, 6, null, 2023-05-23, null).; nested exception is org.postgresql.util.PSQLException: ERROR: null value in column "cmt_content" of relation "tb_comment" violates not-null constraint
  Detail: Failing row contains (6, 6, null, 2023-05-23, null).

더보기

해당 오류는 데이터베이스 업데이트 중에 tb_comment 테이블의 cmt_content 열에 대한 NOT NULL 제약 조건을 위반했음을 나타냅니다. 오류 메시지에 따르면 Failing row contains (6, 6, null, 2023-05-23, null)라고 나와있는데, cmt_content 열의 값이 null로 입력되어 발생한 것 같습니다.

문제를 해결하기 위해 다음 단계를 수행할 수 있습니다:

  1. CommentDTO 객체에 대한 데이터 유효성 검사를 수행하고, cmt_content 필드가 null인 경우에 대한 처리를 추가해야 합니다. 예를 들어, cmt_content가 null인 경우에 기본값이나 빈 문자열로 설정하거나, 사용자로부터 반드시 입력받도록 유효성 검사를 추가할 수 있습니다.
  2. 데이터베이스 스키마를 확인하여 tb_comment 테이블의 cmt_content 열이 NOT NULL 제약 조건으로 설정되어 있는지 확인해야 합니다. 만약 제약 조건을 변경하거나 해제해야 하는 경우, 데이터베이스 관리 도구를 사용하여 해당 변경을 수행해야 합니다.
  3. ComuMapper.xml 파일을 확인해야 합니다. 해당 파일에서 comment 쿼리에 대한 매핑이 제대로 이루어졌는지 확인하고, 매핑된 SQL 쿼리에서 cmt_content 필드가 올바르게 설정되었는지 확인해야 합니다. 필요에 따라 SQL 쿼리를 수정하여 cmt_content 필드가 null이 아닌 값을 가지도록 할 수 있습니다.

 

이리저리 고쳐봤지만 소용이 없다. 잠이 너무와서 내일 다시 도전해야겠다.

 

 

반응형