JPA

    QueryDSL을 쓰다보니 Q-Class가 뭘까 싶네?

    QueryDSL을 쓰다보니 Q-Class가 뭘까 싶네?

    필자는 개발중 JPA를 위주로 사용한다. JPA를 사용하다보면 Command의 쿼리는 정말 손쉽게 개발이 가능하지만 가끔 JPA로만 조회 쿼리를 작성할 때는 힘들때가 많았다. 동적쿼리나 복잡한 쿼리를 작성할 때는 정말 힘들 때도 많았다. (JPQL ...) 사실 개발 시점에 IDE에서 알아차리기도 힘들고 테스트 작성도 어려움이 있었다. 그래서 조회쪽을 MyBatis와 같은 Mapper 를 별도로 사용해볼까? 고민이 들었지만 그럼 ORM을 사용하는 이유가 뭘까? 라는 의문도 나오게 되었다. 이부분에 대해 모순되는 점들이 있는 것 같아 검색을 해보니 Criteria, QueryDsl 등 여러 방법이 존재하였다. 그래서 QueryDsl 문법을 공부하고 실무에서 잘 사용중였는데 최근 Java Reflection..

    JPA N + 1, FetchJoin, EntityGraph

    JPA N + 1, FetchJoin, EntityGraph

    필자는 Spring Data JPA 를 많이 사용 중에 있다. 초반에 해당 문제로 골머리를 앓았던 기억이 있는데 그때 기억도 나는 겸 다시 정리도 하는 겸하여 정리해보고자 한다. 준비 우선 테스트를 진행해 볼 엔티티를 작성하자. 책과 작가를 엔티티로 삼았으며 책 → 작가를 의존하는 ManyToOne 관계를 맺어주었다. 코드는 아래와 같다. Entity @Entity @Getter @NoArgsConstructor @ToString public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @ManyToOne private Author author; public..

    Spring JPA - Hibernate 에서 field가 Enum일때 @ColumnDefault는 어떻게?

    Spring JPA - Hibernate 에서 field가 Enum일때 @ColumnDefault는 어떻게?

    Spring Boot 기반에 JPA 를 사용하는 중에 Enum 으로 Field를 관리하는 일이 많아졌습니다. 이때 Enum 에 초기값을 DB 단에서 설정해주어도 되고 Entity 객체를 생성할 때 기본으로 할당해주는 방법을 주로 사용하고 있었습니다. 근데 @ColumnDefault 로는 설정을 못해줄까? 라는 의문점이 생겨 적용을 해보았습니다. 아래는 예제 코드입니다. // enum public enum BoardType { NOTICE, FREE, COMMUNITY, ORGANIZATION; } // Entity Class ... @Column(name = "type") @NotNull @Enumerated(value = EnumType.STRING) private BoardType type; ... ..