@Modifying의 동작 알아보기
·
스프링
📌 @Modifying?Spring Data JPA를 사용하는 경우, @Query를 통해 JPQL을 작성하는 상황이 있습니다. 예시로, 상품의 모든 가격을 인상해야 하는 상황이라고 가정해 보겠습니다. 이때 변경 감지를 통해서 정보를 업데이트한다면 상품 개수별로 쿼리가 각각 실행됩니다. 주로 이러한 상황에 우리는 @Query를 통해 벌크 연산을 수행하게 됩니다.@Query("update Item i set i.price = i.price + 1000")@Modifyingvoid increasePrice();@Query는 네임드 쿼리(Named Query)를 인터페이스에서 바로 사용할 수 있게 하는 어노테이션입니다.이때 @Query로 작성된 JPQL이 DML(INSERT, DELETE, UPDATE 쿼리)..
JPA의 Fetch Join을 사용하는 이유 (vs Join)
·
카테고리 없음
📌 Fetch Join이란?JPA에서는 fetch join이 존재합니다. 기존 SQL에서는 존재하지 않아서 생소할 수 있습니다.fetch join은 JPQL에서 성능 최적화를 위해 제공하는 기능이며 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능입니다. 이해를 위해 Member와 Team을 예시로 들어보겠습니다.📌 Member와 Team 연관관계우선 join을 아예 사용하지 않고, Member를 조회를 해보겠습니다.Join X 예시String query = "select m from Member m";List result = em.createQuery(query, Member.class) .getResultList();// Member의 Team은 지연로딩for (Member..
[JPA] 연관관계의 주인이란?
·
스프링
JPA에서 연관관계 매핑은 총 4가지가 존재합니다.@OneToOne@ManyToOne@OneToMany@ManyToMany이때 방향이 단방향인지, 양방향인지에 따라 또 나뉘게 됩니다. 예를 들어 팀과 멤버가 있다고 가정해 봅시다.간단하게 생각해 보면 멤버만 팀을 알고 있다면 단방향, 팀 또한 멤버에 대해 알고있다면 양방향이 됩니다. 양방향 연관관계를 코드로 한번 확인해 보겠습니다.@Entitypublic class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @ManyToOne(fe..
Mybatis vs JPA
·
스프링
프로젝트를 진행하면서 DB 접근 기술로 Mybatis를 사용할지, JPA를 사용할지 고민이 되었습니다. 결국 Mybatis를 사용하기로 결정되었는데, 사용하면서 느낀 점에 대해서 이야기해보겠습니다.저의 짧은 지식으로 작성된 글이니, 틀린 내용이 있을 수 있습니다.Mybatis를 사용하며 불편한 점개발의 중점Mybatis를 사용하게 되면, SQL을 직접 작성해야 합니다. 물론 JPA를 사용한다고 해서 작성할 일이 없는 건 아니지만, Mybatis와 비교하면 상당히 적습니다.이는 전체 개발 시간에서 SQL을 작성하는 시간이 차지하는 비율이 더 높아진다고 할 수 있습니다. 프로젝트를 진행하면서 비즈니스 로직에 해당하는 코드보다 SQL을 작성하는 시간이 많아지게 되면서 소요 시간의 볼륨 자체가 커지는 듯한 느낌..