JPA 6

[JPA] 자바에서 복합키 사용하기

📌 들어가며 테이블을 설계하다 보면 주로 detail 관련 테이블에 id + 순번으로 복합키를 생성하게 되는 경우가 많습니다. 이번 포스팅에서는 복합키를 사용하는 테이블을 자바에서 Entity로 개발하는 방법중 가장 흔히 쓰이는 @EmbeddedId 어노테이션에 대해 포스팅하려고 합니다. 📌 EmbeddedId Embeddable Object를 Id로 사용하는 방식으로 주로 아래와 같이 코딩하여 사용합니다. @Embeddable @Getter @NoArgsConstructor @AllArgsConstructor public class OrderItemId implements Serializable { @Column(name = "ord_id") private Long orderId; @Column(nam..

BackEnd/JPA 2023.09.17

@Embeddable @Embedded 어노테이션에 대해 알아보자

📌 들어가며 @Embeddable 과 @Embedded 어노테이션은 Entity가 단순할 때에는 잘 사용하지 않지만 Entity 가 복잡해질 수록 가독성과 공통적인 의미를 갖고 있는 컬럼을 하나의 객체로 사용하기 위해 자주 사용하게 되는 어노테이션입니다. 이번 포스팅에서는 해당 어노테이션의 사용법에 대해 정리해보도록 하겠습니다. 📌 @Embeddable , @Embedded 어노테이션 사용하기 Embeddable 어노테이션을 사용하는 가장 흔한 예시인 User Entity를 정의하면서 해당 어노테이션의 사용법을 알아보겠습니다. 우선 두 어노테이션은 @Embeddable : 값 타입을 정의하는 곳에 표시 @Embedded : 값 타입을 사용하는 곳에 표시 다음의 위치에서 사용하게 됩니다. 그럼 예시로 Us..

BackEnd/JPA 2023.04.24

@Transient 어노테이션에 대한 이해

📌 들어가며 이번 포스팅에서는 @Transient 어노테이션이 무엇인지, 그리고 그 쓰임에 대하여 정리하고자 합니다. 새롭게 합류한 도메인팀의 스프링부트 로직에서 @Transient 가 다수 발견되어 정리하게 되었습니다. 📌 @Transient 란 @Transient는 엔티티 객체의 데이터와 테이블의 컬럼(column)과 매핑하고 있는 관계를 제외하기 위해 사용합니다. 주로 보안정보나 굳이 테이블에 저장할 필요는 없지만 도메인 로직 또는 비즈니스 로직상 계산을 위해 필요한 경우 해당 어노테이션을 활용합니다. 더 정확히 표현하면 JPA의 가장 큰 특징 중 하나인 영속성 컨텍스트 대상에서 제외시키기 위하여 사용됩니다. 또한 JPA 의 컬럼 매핑 레퍼런스 어노테이션은 Field, Property 방식을 지원하..

BackEnd/JPA 2023.04.20

SpringBoot @Converter @Convert 데이터 처리 시 활용

코딩을 하다보면 java 에서는 CardStatus 와 같은 Card의 현 상태를 Enum을 사용해서 값(ACTIVE, USE, PAUSE)을 다루고 싶고 데이터베이스에는 해당 Status에 따른 표현 값("A", "U", "P")을 저장하고 싶은 경우가 있습니다. java에서의 코딩할때의 표현 값과 DB에 실제 저장되는 값이 다르게 하는 것입니다. public enum CardStatus { ACTIVE("A"), // 발행 USE("U"), // 사용 PAUSE("P"); //사용 정지 private final String value; @JsonValue public String getValue() { return value; } CardStatus(String value) { this.value =..

BackEnd/SpringBoot 2022.12.11

[JPA] 영속성 연관관계 전이 CASCADE 란?

JPA를 공부하면서 항상 헷갈렸던 부분이라 명확하게 정리를 해보고 넘어가려 합니다. CASCADE - 영속성 연관관계의 전이를 의미합니다. - 부모 엔티티에서 자식 엔티티로 상태를 전이하는 것입니다. ex. 부모 엔티티 저장할 때 자식 엔티티도 함께 저장, 게시글과 첨부파일 - Parent와 Child가 라이프사이클이 동일할 때, Child를 소유하는 Parent가 하나일 때 사용하는 것이 좋습니다. Entity의 상태 Transient : JPA가 모르는 상태 (단순 객체 생성) Persistent : JPA가 관리중인 상태 (1차 캐시, Dirty Checking, Write Behind, ...) Detached : JPA가 더이상 관리하지 않는 상태 Removed : JPA가 관리하긴 하지만 삭제..

BackEnd/JPA 2022.11.13

JPA의 Dirty Checking이란?

Jpa를 활용하여 백엔드 개발을 하다보면 'JPA 영속성 컨텍스트' 혹은 '더티 체킹'이란 말을 종종 들을 수 있습니다. 실제로 얼마전에 회사에서 코드리뷰를 진행하는데 어떤 팀원 분께서 다음과 같이 말씀하셨다. 제가 알기로 JPA는 더티 체킹이라는 걸 해서 변경사항을 감지해 자동으로 update를 해주는 걸로 알고 있는데 왜 한번 더 save를 해줬나요? 이유가 있어요? 그 때 나는 물론 명확하게 답변을 드리지 못했다... 아..? 네..! 그러면 한번 더 save 하지 않고 트랜잭션을 마무리 하도록 하겠습니다. 라고 대충 얼버무렸던 기억이.... 그래서 오늘은 이 Dirty Checking 이라는 것의 개념을 한번 짚고 넘어가려고 합니다. 다음에는 명확히 답변드릴 수 있도록...! 예를 들어 다음과 같..

BackEnd/JPA 2022.11.05