JPA 6

[JPA] no entitymanager with actual transaction available for current thread

나다. 이 글이 뭐하는 글이냐면 우리는 살면서 어이없는 일들과 마주하게 된다. 그리고 대부분의 어이없는 일들은 사소한 실수에서 비롯된다. 이 글의 제목 또한 굉장히 사소한 실수에서 발생하는 개 같은 일인데 이번 글을 통해 같은 실수를 하는 사람이 적어지길 바라는 마음으로 쓴다. 왜 이 오류가 발생했냐면 우리는 어떤 코드를 완성하면 테스트를 한다. 이는 척수반사와 같은 현상인데 테스트는 무조건적으로 시행되어야만 코드에 존재하는 하자를 검증할 수 있기 때문이다. 물론 비단 테스트를 할 때뿐 아니라 어느 경우든 발생할 수 있지만 내 생각에 대부분 테스트 단계에서 어떤 것을 저장할 때 발생하게 될 텐데 이 오류는 EntityManager가 persist() 함수를 호출 받았으나 함수를 처리 할 Transacti..

JPA 2023.01.04

[JPA] 연관관계 맵핑(다대일 / N:1)

나다. 이 글이 뭐하는 글이냐면 JPA는 객체와 데이터베이스의 싱크를 맞춰 객체로 데이터베이스를 쪼물딱거릴 수 있게 하는 기능을 가지고 있다. JPA가 그 둘을 이어주는 교량의 역할을 하지만 결정적으로 "어떤 요소를 어떤 요소에 이어줄지" 명시하는 것은 필수적이다. 삼라만상 모든 일들이 같다. 이번 글에서는 그 방법에 대해 예시와 함께 알아보자. 객체를 테이블에 맞추면? 먼저, 객체를 테이블에 맞추어 모델링 한 경우에 대한 예를 보자. 우리가(You) 배가 고파 전화를 통해 동네에 하나뿐인 중국집 청룡각(BlueDragonR, 간짜장/찹쌀탕수육 밖에 할 줄 모름)에 주문을 한다고 치자. @Entity @Getter @Setter public class You { @Id @GeneratedValue @Co..

JPA 2022.12.28

[JPA] JPA와 PK 그리고 Id

나다. 이 글이 뭐하는 글이냐면 오랜만에 글을 쓴다. "요세 무슨 일이 이렇게도 많은지" 라는 핑계로 잠깐 놀다가 왔다. 이번 글에서는 영속성 컨텍스트에서 특정 컨텐츠를 다루기 위해서 필수적으로 있어야만 했던 Id(식별자)와 그 값의 사용 전략들에 대해 알아볼거다. 아이디를 부여하는 방법 모든 일에는 순서가 있다고 했던가. 먼저 아이디를 사용하고 싶다면 아이디를 만들어야 사용할 수 있을 것이다. 우리는 간혹 테스트코드를 만들거나 간단히 어떤 요소를 테스트하고 싶을때 임시적으로 Long id = 1L; item.setId(++id); 와 같이 사용하고는 한다. 물론 아이디를 부여함에는 변함이 없으며 자동으로 1씩 증가하기 때문에 모든 요소에 중복되지 않는 고유적인 아이디를 부여함은 변하지 않는다. 하지만 ..

JPA 2022.12.28

[JPA] 영속성 컨텍스트와 Flush

나다. 이 글이 뭐하는 글이냐면 저번 글에서 영속성 컨텍스트의 개념과 엔티티의 상태에 대해 알아봤으니 이제 실질적으로 persist를 통해 엔티티를 영속성 컨텍스트에 집어넣었을 때 일어나는 동작들과 영속성 컨텍스트의 부속적인 요소 등에 대해 알아보려 한다. 그래서 영속성 컨텍스트의 특징과 장점은? 1. 영속 상태의 엔티티는 무조건 식별자 값을 가지고 있어야 한다. - JPA는 식별자 값을 통해 컨텐츠를 구분한다. 없으면 안됨. 2. Flush를 통한 데이터베이스와 영속성 컨텍스트의 동기화. - Flush를 통해 영속성 컨텍스트에 일어난 변화를 데이터베이스와 동기화한다. 3. 1차 캐시 캐시데이터 라는 말을 들어본 적이 있는가. 우리가 자주 가는 웹사이트들은 어쩐지 로딩이 존X 빠르다고 느끼며 "오 역시 ..

JPA 2022.12.22

[JPA] 영속성 컨텍스트란 무엇인가.

나다. 이 글이 뭐하는 글이냐면 이번 글은 JPA의 영속성 컨텍스트에 대해 설명하기 위해 작성한다. 무릇 JPA를 배우기 시작하며 가장 처음 접하는 단어가 "영속성 컨텍스트" 이지 않나 싶다. 그 만큼 영속성 컨텍스트란 JPA의 핵심적인 부분이라 볼 수 있는 부분이다. 영속성 컨텍스트와 친구들 영속성 컨텍스트에 대해 알기 전 먼저 알아야 할 친구가 남아있다. Entity(엔티티)와 EntityManager(엔티티 매니저) 간단하게 설명하면 엔티티는 테이블과 연결될 객체 엔티티 매니저는 그 객체를 영속성 컨텍스트에 보관하거나 조회하는 등 사용자가 원하는 액션을 취한다. 그렇다면 오늘의 주제인 "영속성 컨텍스트"란 무엇인가. 영속성 컨텍스트란 당신과 데이터베이스 사이에 객체를 보관하기 위한 "임의의 공간"을..

JPA 2022.12.22

[JPA] JPA란 무엇인가.

나다. 이 글이 뭐하는 글이냐면 본인은 요즘 JPA에 대해 배우고 있다. 필수적인 기술이 될 전망이라기도 하고 무엇보다 꽤 재미있으니 기록으로 남겨 혹여나 필요한 사람이 있다면 같이 볼 수 있도록 하려한다. 좋은건 나눠쓰라는 말도 있지 않은가. Java Persistence API 이하 JPA는 Java Persistence API의 준말이다. 간혹 API가 무엇인지 감을 잡지 못하는 사람들이 있어 간단히 API에 대해 말하자면 어떤 대상을 이용하기 위한 메뉴얼이라 생각하면 편하게 이해할 수 있겠다. 예를 들어, 우리가 배가 고파 청룡각에 갔다고 가정하자. 가게에 가서 하는 것이 무엇인가? 우리가 가게에서 가장 먼저하는 것은 "메뉴판"을 보는 일이다. 만약 지금 당신은 "탕수육"을 먹고싶다. 그렇다면 다..

JPA 2022.12.20