🌱 SPRING/JPA

    [QueryDSL] JPA에서 MySQL 비트연산하는 방법

    [QueryDSL] JPA에서 MySQL 비트연산하는 방법

    서비스를 개발하다보면 쿼리에서 비트 연산이 필요한 경우가 종종 발생합니다. 이 때 MyBatis를 사용한다면 문제가 되지 않지만, JPA와 QueryDSL을 사용하고 있다면 이들이 비트 연산 기능을 제공하지 않고 있기 때문에 문제가 발생합니다. 이번 포스팅에서는 제가 MySQL + JPA + QueryDSL 환경에서 비트연산을 구현하는 과정과 결과를 소개하려고 합니다. 예시 상황 요구사항 사용자는 자신이 관심있는 취미를 여러개 선택해 저장할 수 있습니다. 관리자는 특정 취미를 선택한 사용자 목록을 조회할 수 있습니다. 샘플 코드 취미 옵션(HobbyType) @Getter @AllArgsConstructor public enum HobbyType { READING(1), SPORTS(2), MUSIC(4..

    [Spring Data JPA] Auditing에 ZonedDateTime 사용하기

    [Spring Data JPA] Auditing에 ZonedDateTime 사용하기

    들어가며 JPA에는 엔티티의 생성 일자와 최종 수정일자, 생성자와 최종 수정자를 entityManager에서 persist하기 전에 자동으로 현재 일시로 세팅해주는 기능이 존재합니다. JPA Auditing이라고 하는데요, 대부분의 경우 이 Auditing 기능을 @MappedSuperclass로 만들고 엔티티 클래스에서 상속받도록 구현합니다. 이번 포스팅은 이 JPA Auditing 중 생성 일자와 최종 수정일자 필드의 타입에 관한 포스팅입니다. 문제가 뭐였냐면 프로젝트의 날짜 타입을 ZonedDateTime으로 통일함에 따라, Auditing의 @CreatedDate와 @LastModifiedDate 필드 또한 ZonedDateTime으로 변경하게 되었습니다. 단순히 필드의 자료형만 변경하면 될 줄 ..

    [JPA] 즉시 로딩/지연 로딩

    [JPA] 즉시 로딩/지연 로딩

    앞선 포스팅에서 프록시에 대해 알아보았습니다. 이번 포스팅에서는 JPA에서 프록시를 어떻게 활용하는지, 즉시 로딩과 지연 로딩을 통해 알아봅니다. 지연 로딩 (Lazy Loading) 1 2 3 4 5 6 7 8 9 @Entity public class Member { @Id @GeneratedValue private Long id; @ManyToOne(fetch=FetchType.LAZY) private Team team; } Colored by Color Scripter cs 지연 로딩은 엔티티 조회 시점이 아닌 엔티티 내 연관관계를 참조할 때 해당 연관관계에 대한 SQL이 질의되는 기능이며, fetch=FetchType.LAZY 옵션으로 지정할 수 있습니다. 엔티티 조회 시, 연관관계 필드는 프록시..

    [JPA] 프록시

    [JPA] 프록시

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 @Entity public class Member { @Id @GeneratedValue private Long id; private Team team; } @Entity public class Team { @Id private Long id; } cs 이런 연관관계의 엔티티가 존재할 때, 아래 상황을 가정해보겠습니다. Case 1. Member와 Team을 함께 출력하는 비즈니스 로직이 추가되었다. 이 때는 아래와 같이 로직을 구현할 수 있겠습니다. JPA에서 Member 조회 시, 자동으로 Team까지 함께 조회해오므로, EntityManager.find 호출 시에 Member와 Team을 조인해서 가져오는 SELECT 쿼리를 수행..

    [JPA] 상속관계 매핑

    [JPA] 상속관계 매핑

    상속관계 매핑 RDBMS에는 상속관계가 없지만, 객체에서는 상속관계가 존재합니다. 그리고 RDBMS에서는 슈퍼타입-서브타입 관계 모델링이 객체의 상속관계와 유사합니다. 이번 포스팅에서는 이 슈퍼타입-서브타입 관계를 JPA로 모델링하는 방법을 알아봅니다. 이 슈퍼타입-서브타입 논리 모델을 실제 물리 모델로 구현하려면 아래와 같은 방법이 있습니다. 조인 전략 : 각각 테이블로 변환 단일 테이블 전략 : 통합 테이블로 변환 구현 클래스마다 테이블 전략 : 서브타입 테이블로 변환 그리고 이 상속관계 매핑시에는 Entity를 대상으로 어노테이션을 입력해주는데, 슈퍼 타입(슈퍼 클래스)에는 @Inhritance와 @DiscriminatorColumn을, 서브 타입(서브 클래스)에는 @DiscriminatorValu..

    [JPA] 다양한 연관관계 매핑

    [JPA] 다양한 연관관계 매핑

    연관관계 매핑 시 고려사항 다중성 단방향 or 양방향 연관관계의 주인 다중성 N:1 → @ManyToOne 1:N → @OneToMany 1:1 → @OneToOne N:M → @ManyToMany 단방향 or 양방향 테이블 외래 키 하나로 양쪽 JOIN 가능 사실 방향이라는 개념은 없다. 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체의 양방향 관계는 참조가 각각 존재하므로, 둘 중 테이블의 외래 키를 관리할 객체를 지정해야한다. 연관관계의 주인 → 외래 키를 관리하는 참조 주인의 반대편 → 외래 키에 영향을 주지 않고, 단순 조회만 가능함. 다대일 N:1 가장 많이 사용하는 ..

반응형