작성
·
1.1K
·
수정됨
0
안녕하세요! 강의를 통해 JPA를 접하게 되어 간단한 프로젝트를 진행하고 있습니다.
프로젝트 진행 중 에러가 발생하여 질문드리고자 합니다!
아래는 답변 엔티티 코드입니다.
public class Answer {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(columnDefinition = "TEXT")
private String content;
@ManyToOn
private Question question; //fk
private LocalDateTime createAt;
private LocalDateTime modifyAt;
}
보시는 것처럼 답변 엔티티에는 질문 엔티티(Question)가 fk로 설정되어 있습니다. 이 연관관계에서 이전까지는 아무런 문제없이 answer.save(..., ..., question, ..., ...);
을 하면 정상작동을 했지만, 갑자기 다시 기능을 실행하니 아래의 에러가 발생했습니다.
JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation
hibernater 쿼리를 확인하니 fk 필드가 null로 찍혔습니다.
위 에러와 쿼리를 보고 fk 필드에서 오류가 난 것을 알게 되어 확실한 이유 없이 @ManyToOne(fetch = fetchType.LAZY)
로 수정하니 제대로 동작했습니다.
지연 로딩을 사용해야 한다는 말을 듣고 수정하긴 했지만 아직도 왜 해당 에러가 발생했는지는 모르겠습니다.
답변 1
0
안녕하세요. jam님
전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요
추가로 다음 내용도 코멘트 부탁드립니다.
1. 실행 방법을 알려주세요.
2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.
감사합니다.
안녕하세요 강사님! 답변 감사드립니다 :)
아래 링크에서 프로젝트 압축 파일을 받으시면 됩니다.
https://drive.google.com/file/d/1EGQfAoCiNSEfl48gJKWCKeRsekJ__OfU/view?usp=sharing
1. 배포를 하지 않았기 때문에 로컬에서 실행하시면 됩니다.
- 사용하시는 DB를 먼저 실행시켜주세요 (저는 localhost, H2를 사용했습니다.)
- 이후 ide에서 SbbApplication.java를 실행하면 됩니다.
2. 질문에서 언급한 것처럼 지연 로딩 적용 후 해당 에러가 해결되어 다시 확인을 할 수 있을 지는 확신할 수 없습니다. 확실한 것은 제가 Answer Entity(sbb.Answer.Answer.java)와 Question Entity(sbb.Question.Question.java)에서
@ManyToOne
를 적용한 필드에(fetch = FetchType.LAZY)
를 적용했더니 해결되었다는 것입니다.발생 상황은 AnswerService의 create 메소드에서 save를 했을 때 입니다. 마찬가지로 QuestionService의 create 메소드에서 save를 했을 때 발생했습니다.
감사합니다.