일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 기술공부
- 기술면접공부
- JPA공부
- 스프링부트
- 스프링부트공부
- JPA스터디
- 스프링
- JPA
- 카프카
- 코테공부
- Axon framework
- 프로그래머스
- 스프링 공부
- 코테준비
- 스프링공부
- JPA예제
- 플러터 공부
- Flutter
- K8S
- nestjs
- 자료구조공부
- 알고리즘공부
- querydsl
- DDD
- Kafka
- 플러터 개발
- 자바공부
- JPA 공부
- nestjs공부
- nestjs스터디
- Today
- Total
목록Develop/[JPA] (68)
DevBoi
상속 적으로 Response가 필요한 경우가 있다. 부모 DTO가 있고 해당 디티오는 하위의 디티오 리스트를 가지고 있다. 해당 케이스는 아래와 같이 처리한다. package com.boiler.core.backend.normaladmin.reservation.dto; import com.boiler.core.backend.entity.Gym; import com.boiler.core.backend.entity.Member; import com.boiler.core.backend.entity.Reservation; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Sett..
타임존이 이상하게 되어있어서, 실제 쿼리를 수행할 때 다르게 결과를 보여준다. 1. DB timezone 설정 2. JPA 내 타임존 설정 위의 두가지를 크게 변경해주어야 한다. JPA 내 타임존 변경 jpa: open-in-view: false show-sql: true hibernate: ddl-auto: update jdbc: time_zone: Asia/Seoul properties: hibernate: show_sql: true format_sql: true package com.boiler.core.backend; import jakarta.annotation.PostConstruct; import org.springframework.boot.SpringApplication; import or..
로깅에서 실제 동작하는 쿼리 로깅찍는 법 implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' logging: level: p6spy: info org: hibernate: type: descriptor: sql: trace package com.boiler.core.backend.config; import com.p6spy.engine.logging.Category; import com.p6spy.engine.spy.P6SpyOptions; import com.p6spy.engine.spy.appender.MessageFormattingStrategy; import jakarta.annotation.PostConstruct;..
Querydsl 처리 중 페이징처리 관련 정리 컨트롤러 @GetMapping("/member") @Operation(description = "회원 상세 조회") public PageImpl getAllMember( MemberReadDto memberReadDto,PageRequest pageRequest) { Pageable pageable = pageRequest.of(); PageImpl result = memberService.getAllMember(memberReadDto,pageable); return result; } 커스텀 페이징 객체 구현 package com.boiler.core.backend.member.dto.paging; import org.springframework.data...
귀찮기도 하지만, 여러개 만드는 것보다 널처리해서 선택적 동적 쿼리를 생성 public Long patchMember(MemberDto tMember) { JPAUpdateClause clause = queryFactory.update(member); clause = MemberUpdateClause(clause,tMember); return clause.execute(); } JPAUpdateClause MemberUpdateClause(JPAUpdateClause jpaUpdateClause,MemberDto tMember){ if(member.address != null) jpaUpdateClause.set(member.address,tMember.address()); if(member.birth ..
QueryDsl 프로젝트를 빌드할때 오류가 났다. 사유는 Qclass의 중복 생성시도로 인한 오류이다. 아래와 같이 세팅해서 해결했다. 별건아니고 그냥 의존성 주입과 그래들 과정에서 번거롭게 또 삽질 싫어서 남겨둔다. 나는 쿼리 팩토리를 별도 빈으로 생성해서 서비스에서 주입 받아서 사용했다. 별도 레포지토리는 비즈니스 로직이 복잡할때만 ...할까 하다가 파일이 많아지면 신규 모듈 개발할때 귀찮아서 우선 서비스에서 끝냈다. plugins { id 'org.springframework.boot' version '3.1.2' id 'io.spring.dependency-management' version '1.1.2' id 'java' } group = 'com.boiler.core' version = '0...
Entity 에서 properties로 아래와 같이 저장하고싶을때가 있다. List tags 이를 해결하고 JPA는 어떻게 관리하는 지 알아보자 우선 내가 사용하는 Entity 타입이다. package com.boiler.flutterbackend.app.group.dto; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import java.time.LocalDateTime; import java.util.List; @AllArgsConstructor @NoArg..
비즈니스 로직은 정리를 안하는 편이지만 정리를 해보자 QueryDsl을 사용하다가 두개의 테이블을 조인 나랑 친구인 상태인 유저는 제외, 이외 모든 유저정보를 불러모으지만, 내가 친구를 신청했던 상태에 대한 정보는 추가로 들고 와야하는 비즈니스 로직 작성 -> LeftOuterJoin + SelfJoin + Projections.fields 다대일 연관관계 매핑 안한이유 = N+1에 대한 위험 요소가 높고, 두개를 조인했을때 오히려, 친구라는 엔티티의 자유도가 떨어진다고 판단 @Override public List findFriendRecommandList(String userId) { QFriend subFriends = new QFriend("subFriends"); List result = quer..
1) BooleanBuilder, BolleanExpression 사용 비슷한 용도이지만 내 생각에 두개의 용도는 다르다. BooleanExpression은 null인 경우 null을 반환해주면서, 조건에서 제외가 된다. 즉 특정 조건에 따라서 다이나믹하게 조건절이 추가되어야 하는경우, 심하면 없어도되는경우 BooleanExpression을 사용한다. BooleanBuilder는 항상 객체가 생성이 되지만 복잡한 조건절의 쿼리를 생성해야할 때 이걸 사용하게 되면, 그나마 보기 쉽고 조합을 자유롭게 해줄수있다 다만 무조건 사용해야하고 복잡한 조건절의 조합 도구라고 보면된다. 물론 두개다 때에 따라서 용도와 장점과 어긋나게 사용은 가능하지만 장단이 있으니 그에 따라 맞게 사용하면 좋을 것 같다. Boolea..
추천친구 (나랑 아무런 친구 요청이 없는 것) 친구 요청(추천친구에서 친구 요청) 친구 검색(닉네임 기준 친구 검색) 친구 리스트 (본인과 친구관계인 사람) 친구 수락(친구 요청에 대한 승인) 친구 요청 내역 확인(본인 기준 친구 요청을 보낸사람) 우선 이렇게 3가지에 대한 API를 개발할 것이고, 포스팅은 한개만 예시로 할 것이다. 해당 API는 플러터에서 사용 목적으로 개발한다. 친구 controller @GetMapping("/recommand-friends") public List recommandFriends(@RequestParam("userId") String userId) { return friendService.recommendFriends(userId); } @PostMapping("/..