| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- CORS
- CQS
- #@Transacional
- HandlerMethod
- generic type
- propagation
- demand paging
- Transaction
- COPYOFRANGE
- assertJ
- API
- Generic method
- 벌크연산
- type eraser
- cross-cutting concerns
- NestJS 요청흐름
- 역정규화
- Java
- hoisting
- optimistic lock
- wrapper class
- IllegalStateException
- 프로그래머스
- 단어변환
- SPOF
- pessimistic lock
- RequestMappingHandlerMapping
- tracking-modes
- TDZ
- ExceptionResolver
- Today
- Total
목록Tech/JPA (39)
jingyulog
개요먼저 엔티티 매니저에 대해 알기 위해서는 영속성 컨텍스트에 대해 알아야 한다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로 1차 캐싱, 쓰기 지연, 변경 감지(dirty checking)를 통해 영속 로직을 효율적으로 할 수 있게 해준다. 이러한 효율적인 영속 로직 수행을 위해서 엔티티는 영속성 컨텍스트에 관리되어야 한다. 이런 작업을 도와주는 것이 엔티티 매니저이다.엔티티 매니저는 엔티티의 상태를 변경하고, 영속성 컨텍스트와 상호작용함으로써 영속 로직을 수행하는 역할을 가지고 있다.엔티티 매니저의 역할엔티티는 영속성 컨텍스트와 관련하여 4가지 상태(비영속, 영속, 준영속, 삭제)를 가질 수 있다.이때, 엔티티 매니저는 persist, merge, remove, close 메서드를 이용해 엔티티..
🔎 deprecated 된 이유 fetchResults()와 fetchCount()는 개발자가 작성한 select 쿼리를 기반으로 count 용 쿼리를 내부에서 만들어서 실행한다. 하지만 이게 단순한 쿼리에서는 잘 동작하지만, 복잡한 쿼리에서는 제대로 동작하지 않는다. 따라서 count 쿼리가 필요하면 별도로 작성해야 한다. 💻 count 쿼리 예제 List content = queryFactory .selectFrom(item) .where(regDtsAfter(itemSearchDto.getSearchDateType()), searchSellStatusEq(itemSearchDto.getSearchSellStatus()), searchByLike(itemSearchDto.getSearchBy(), i..
🔎 deprecated된 이유 queryDsl의 fetchResult의 경우 count를 하기위해선 count용 쿼리를 만들어서 실행해야 하는데, 카운트를 하려는 select 쿼리를 기반으로 count 쿼리를 만들어 실행한다. 단순한 쿼리에서는 잘 동작하는데, 복잡한 쿼리(다중그룹 쿼리)에서는 잘 작동하지 않는다. groupby having 절을 사용하는 등의 복잡한 쿼리 문에서 예외가 발생한다. 모든 dialect(방언) count 쿼리가 유효하지는 않다. 📌 결론 fetchResult() 대신에 fetch()를 사용하고, count 쿼리는 별도로 날려준다. 인용 https://velog.io/@nestour95/QueryDsl-fetchResults%EA%B0%80-deprecated-%EB%90%9..
✍️ 정의 QueryDSL에서는 BooleanExpression이라는 where절에서 사용할 수 있는 값을 지원한다. BooleanExpression을 반환하는 메서드를 만들고, 해당 조건들을 다른 쿼리를 생성할 때 사용할 수 있기 때문에 중복 코드를 줄일 수 있다는 장점이 있다. ( 코드의 재사용 ) 🔎 사용법 private BooleanExpression usernameEq(String username) { return StringUtils.hasText(username) ? member.username.eq(username) : null; } private BooleanExpression teamNameEq(String teamName) { return StringUtils.hasText(teamN..
QueryDSL과 Spring Data Jpa 를 함께 사용하기 위해서는 사용자 정의 리포지토리를 정의해야 한다. 단계 사용자 정의 인터페이스 작성 - ItemRepositoryCustom 사용자 정의 인터페이스 구현 - ItemRepositoryCustomImpl Spring Data Jpa 리포지토리에서 사용자 정의 인터페이스 상속
Auditing 기능을 활용한 데이터 추적하기 /** *등록자와 수정자를 처리해주는 AuditorAware 를 빈으로 등록한다. */ @Bean public AuditorAware auditorProvider() { return new AuditorAware() { @Override public Optional getCurrentAuditor() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String userId = ""; if (authentication != null) { // 현재 로그인한 사용자의 정보를 조회하여 사용자의 이름을 등록자와 수정자로 지정한다. userId = auth..