본문 바로가기

JPA24

Spring Data JPA - 쿼리 메서드(3) 7. 벌크성 수정 처리 벌크 업데이트란 단건 UPDATE, DELETE가 아닌 다건의 UPDATE, DELETE 연산을 하나의 쿼리로 하는 것을 말한다. // Bulk Update @Modifying(clearAutomatically = true) @Query("update Member m set m.age = m.age + 1 where m.age >= :age") int bulkAgePlus(@Param("age") int age); 벌크성 수정 쿼리 사용시 주의점 JPA에서 벌크 연산성 조심해야할 게 있다. JPA라는것은 영속성 컨텍스트에서 Entity들이 flush()를 통해서 DB에 반영이 되는건데 벌크연산은 영속성 컨테이너를 안거치고 직접 DB에 update 연산을 해버린다. 그래서 영속성 컨.. 2023. 4. 13.
Spring Data JPA - 쿼리 메서드(2) 5. 반환타입 JPA는 유연환 반환 타입을 지원한다. //컬렉션 -> 데이터가 없으면 빈 컬렉션 List findByUsername(String name); //단건 -> 데이터가 없으면 null Member findByUsername(String name); //단건 -> Optional 처리 Optional findByUsername(String name); - Member findByUsername(String name); 에서 반환값이 2개라면 예외발생 -> norrectResultSizeDataAccessException - JPA Exception은 스프링 Exception으로 변환된다. JPA를 사용하는 클라이언트 입장에서 동일하게 Exception 처리를 할 수 있다. - 반환 타입은 굉장.. 2023. 4. 13.
Spring Data JPA - 쿼리 메서드(1) 1. 메소드 이름으로 쿼리 생성 Distinct findDistinctByLastnameAndFirstname select distinct …​ where x.lastname = ?1 and x.firstname = ?2 And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2 Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2 Is, Equals findByFirstname,findByFirstnameIs,findByFirstnameEquals … where x.firstname = ?1 Between findByStartDateBetween … .. 2023. 4. 12.
JPA - 값 타입의 비교 값 타입: 인스턴스가 달라도 그 안에 값이 같으면 같은 것으로 봐야한다. int a = 10; int b = 10; a == b // true Address a = new Address(“서울시”) Address b = new Address(“서울시”) a == b // false 동일성(identity) 비교: 인스턴스의 참조 값을 비교, == 사용 동등성(equivalence) 비교: 인스턴스의 값을 비교, equals() 사용 값 타입은 a.equals(b)를 사용해서 동등성 비교를 해야 한다. 값 타입의 equals() 메소드를 적절하게 재정의해주어야 한다. (주로 모든 필드 사용) equals 메서드를 오버라이드 하지 않았을 경우 Address address1 = new Address("city.. 2022. 5. 2.
JPA - 값 타입과 불변 객체 1. 값 타입과 불변 객체 왜 복잡하게 값 타입을 나눴을까? 값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념이다. 따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다. 개발자는 Entity에 대해서 신경을 많이 쓰지만 값에 대해서는 크게 신경쓰지 않는다. 그 이유는 값 타입이 안전하게 설계가 되있기 때문이다. 값 타입 공유 참조 임베디드 타입 같은 값 타입을 여러 엔티티에서 공유하면 위험하다. 부작용(side effect) 발생 임베디드 타입을 여러 엔티티에서 공유할 시 부작용 예) main{ Address address = new Address("city", "street", "1000"); Member member1 = new Member(); member.setUsername(.. 2022. 4. 12.