본문 바로가기

전체 글36

[JPA] 연관관계 매핑 - 연관 관계를 매핑할 때 어떻게 해야하는 가(단방향, 양방향) JPA를 공부하면서 학습 했던 내용을 정리해보고자 한다. 일단, RDB에서의 연관관계 매핑은 FK(외래키)로 이루어진다. 그치만 객체에서의 관계는 참조로 이루어진다. (연관관계의 주인이 꼭 있어야한다.) 여기서 RDB와 ORM의 패러다임의 불일치가 발생한다. 객체와 테이블의 연관관계에 대한 차이가 분명하게 있기 때문에, JPA에서는 이러한 연관관계를 매끄럽게 이용할 수 있도록 다양한 어노테이션를 제공해준다. RDB에서에의 관계는 일대일, 일대다, 다대다가 존재한다. 테이블간의 연관관계가 1:1이냐, 1:N이냐, N:M이냐에 따라 외래키를 필드를 추가하여 사용한다. 객체를 테이블에 맞추어서 모델링을 하게 되는 경우를 보면 참조 대신에 외래 키를 직접 필드에 주입을 하게 된다. Member라는 엔티티 안에 .. 2024. 7. 20.
JPA와 영속성 컨텍스트 이해하기 JPA는 간단하게 말하자면 자바 ORM(Object-Relatinal Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크인 것이다.JPA를 구현한 대표적인 오픈소스는 Hibernate가 있다. 주로 사용해 왔던 JPA지만 지나간 이론적인 내용들을 다시 한번 살펴보겠다. JPA에서 가장 중요한 2가지는 다음과 같다객체와 관계형 데이터베이스를 어떻게 매핑할 것인가? (Object Relational Mapping)영속성 컨텍스트그럼 여기서 영속성 컨텍스트가 무엇이냐? 영속성 컨텍스트를 이해하기전 엔티티 매니저 팩토리와 엔티니 매니저를 알아야 한다. (그림)영속성 컨텍스트란?JPA를 이해하는데 가장 중요한 용어.. 2024. 7. 5.
나의 첫 해커톤 개발 회고록(24.06.24~26) 처음으로 개발 회고록을 적어보는 것 같다. 기술적인 부분들이 이번에 새롭게 해본 것들이 많아 기록을 하기 위해 이렇게 적어본다. 나는 이번에 대학교에서 진행하는 해커톤 대회에 참가하게 되었다. 해커톤 대회는 작년에도 나가려고 했으나 대회가 무산되어나가지 못했는데, 이번 여름방학을 맞아 해커톤 대회에 참가 하게 되었다. 우리는 단순한 익명 채팅 웹서비스를 생각했고, WebSocket을 활용하여 실시간 채팅 웹 서비스를 구현하려고 했다.🧑🏻‍💻 Day 1 (웹 소켓 연동)해커톤 1일차에 10시에 학교에 와서 개발 환경 세팅을 했다. 고등학교때 자바를 이용한 TCP 통신 실습을 할 때 빼곤 웹소켓통신을 해본적이 없어서 듣기만 했던 웹소켓을 내가 구현하게 되었다. 처음에는 채팅? 단순히 채팅이라는 이름만 .. 2024. 6. 26.
[JPA] [Trouble Shooting] Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters 에러 해결 팀 프로젝트를 하던 중에 팀원이 작업이 완료돼서 pull을 받고 실행을 돌려보았는데, 이런 오류를 마주치게 되었다.  오류원문더보기For queries with named parameters you need to provide names for method parameters; Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters 구글링을 해본 결과 레포지토리에서 JPQL을 사용한 부분에서 파라미터를 전달받을때 @Param("") 어노테이션을 쓰지 않고 파라미터를 받아와서 생긴 문제였다. 친절하게도 로그에 해결 방법을 알려주고 있다.Use @Param for query method parameter.. 2024. 6. 1.
[Spring-Boot] 세션 URL 리라이팅 해결 방법 /;jsessionid= SSR 방식으로 프로젝트를 진행하고 있어서 토큰 방식을 사용하지 않고 세션 방식으로 로그인을 구현 해두었는데, 로그인이 완료되면 게시글이 조회되지않고 http://localhost:8080/;jsessionid=F59911518B921DF62D09F0DF8F83F872 이런 url로 리라이팅이 되는 현상을 발견했다. 이유를 알아보았는데, 로그인을 처음 시도하면 URL을 위와 같이 jsessionid를 포함하여 보내게 된다. - 웹 브라우저가 쿠키를 지원하지 않을 때, 쿠키 대신 URL을 통해서 세션을 유지하는 것 - 사용하려면 URL에 이 값을 계속 포함하여 전달 해야 한다. 🔎 URL 전달 방식 끄기 옵션 application.properties server.servlet.session.tracking.. 2024. 4. 15.
[JPA] [Trouble Shooting] 에러 Cannot delete or update a parent row: a foreign key constraint fails 참조 무결성 제약 조건 ON DELETE CASCADE 글 작성을 한 후, 댓글이 달려있는 상태에서 글 삭제 테스트를 하던 중 이런 에러를 보았다. 더보기 Cannot delete or update a parent row: a foreign key constraint fails (`learningmate`.`tb_reply`, CONSTRAINT `FKsxgehpxyljiiatkcutvuahw13` FOREIGN KEY (`board_no`) REFERENCES `tb_board` (`board_no`)) 일단 에러가 발생한 이유는 ✓ 데이터 삭제 시 해당 테이블에 연관관계가 설정 되어 있기 때문에 부모를 삭제 할 경우 부모 엔티티를 참조하는 자식 엔티티가 불안정한 상태가 되어 사전에 방지해주기 위해 에러가 발생하는 것이다. Trouble Shooting! .. 2024. 4. 13.