본문 바로가기

Spring/JPA14

벌크연산(Bulk Operation) 기존연산 ex) 모든 직원들 연봉 30% 인상 em.find() 메서드를 통해 모든 직원을 리스트로 조회 직원 엔티티의 연봉을 30% 증가 Commit 시점에 변경감지(Dirty Checking)가 일어나며 update 쿼리 실행 만약 리스트로 조회된 결과가 몇십만, 몇백만개라면 성능의 문제 발생 따라서 벌크연산이 필요 벌크연산(Bulk Operation) 쿼리 한 번으로 여러 테이블 로우 변경(엔티티) executeUpdate() 메서드를 통해 벌크연산 수행 executeUpdate()의 결과는 영향받은 엔티티의 수 UPDATE, DELETE 지원 String qlString = "update Product p " + "set p.price = p.price * 1.1" + "where p.stockA.. 2024. 1. 17.
Named 쿼리 Named 쿼리 미리 정의해서 이름을 부여해두고 사용하는 SQL 미리 정의하기 때문에 정적 쿼리 어노테이션이나 XML에 정의 @Entity @NamedQuery( // Named 쿼리 사용 name = "Member.findByUsername", query = "select m from Member m where m.username = :username") public class Member{ ... } ... public class JpaMain { public static void main(String[] args) { List resultList = em.createNamedQuery("Member.findByUsername", Member.class) .setParameter("username",.. 2024. 1. 17.
페치조인 페치조인(fetch join) JPQL에서 성능 최적화를 위해 제공하는 기능으로 SQL 조인 종류가 아님 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능 join fetch 명령어 사용 N+1 문제 Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.persist(teamB); Member member1 = new Member(); member1.setUsername("회원1"); member1.setTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUser.. 2024. 1. 15.
값 타입 컬렉션 값 타입 컬렉션 값 타입을 하나 이상 저장할 때 사용 @ElementCollection, @CollectionTable 주요 특징 데이터베이스는 컬렉션을 같은 테이블에 저장 불가 -> 별도의 테이블이 필요 @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String userName; @Embedded private Address homeAddress; // 값 타입 컬렉션 사용 @ElementCollection // FAVORITE_FOOD 테이블 정의 @CollectionTable(name = "FAVORITE_FOOD".. 2024. 1. 2.
임베디드 타입 임베디드 타입(복합 값 타입) 새로운 값 타입을 직접 정의할 수 있음 주로 기본 값 타입을 모아서 만들기때문에 복합 값 타입이라고도 함 @Embeddable : 값 타입을 정의하는 곳에 표시 @Embedded : 값 타입을 사용하는 곳에 표시 기본 생성자 필수 import javax.persistence.Embeddable; import java.time.LocalDateTime; @Embeddable public class Period { //기간 private LocalDateTime startDate; private LocalDateTime endDate; public Period() { } public Period(LocalDateTime startDate, LocalDateTime endDate.. 2023. 12. 30.
영속성 전이 영속성 전이(CASCADE) 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함 제공(부모 엔티티 저장 시 자식 엔티티도 함께 저장) 영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없음 종류 ALL : 모두 적용 PERSIST : 영속 REMOVE : 삭제 MERGE : 병합 REFRESH : refresh DETACH : detach @Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) // .. 2023. 12. 29.