JPA(7)
-
Hibernate의 "Detached Entity Passed to Persist" 오류 이해와 해결
오류 이해하기 Detached(준영속) 상태란? Hibernate 및 JPA에서 엔티티의 생명주기 중 하나인 'Detached' 상태는 영속석 컨텍스트가 더 이상 해당 객체를 추적하지 않을 때 발생합니다. 세션이 닫히거나(close), 클리어될 때(clear), 또는 수동으로 영속성 컨텍스트에서 제거(detach) 될 때 이 상태에 도달할 수 있습니다. Entity의 상태 코드 EntityState enum을 보면 public enum EntityState { PERSISTENT, TRANSIENT, DETACHED, DELETED; static final CoreMessageLogger LOG = CoreLogging.messageLogger( EntityState.class ); /** * Deter..
2023.11.08 -
@Builder will ignore the initializing expression entirely 경고 해결
.../entity/Member.java:33: warning: @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. If it is not supposed to be settable during building, make the field final. private List posts = new ArrayList(); 빌드를 하던 와중에 이런 경고가 나왔습니다. Builder는 초기화 식을 아얘 무시한다는 경고문입니다. 원인 저의 Member 엔티티입니다. 여기서 경고를 일으키는 문제점은 posts, co..
2023.11.01 -
Spring Boot JUnit5 : JPA metamodel must not be empty 에러 솔루션
상황 아마 이 에러가 나신 분들은 Controller 에 대한 유닛 테스트 코드를 작성하고 실행하니 에러가 나셨을 겁니다. 많은 분들이 영한님의 Spring Data JPA 강의를 수강 후, 프로젝트 시작 시에 만들어지는 Applicaiton 파일에 붙여둔 @EnableJpaAuditing 어노테이션 때문에 에러가 나게 되는 겁니다. 어째서냐? 원인 Using this annotation will disable full auto-configuration and instead apply only configuration relevant to MVC tests (i.e. @Controller, @ControllerAdvice, @JsonComponent, Converter/GenericConverter, F..
2023.10.31 -
비밀번호의 암호화 위치, 엔티티 내부 vs 서비스 계층?
위와 같은 단순한 게시판 프로젝트를 진행 중에 있다. 회원 엔티티의 password 필드는 프론트엔드에게서 받은 비밀번호를 암호화하여 저장하는 필드이다. 회원가입을 할 때 보통은 이 암호화라는 작업을 MemberService 계층 안에서 작업한다. public class MemberService { private final MemberRepository memberRepository; private final PasswordEncoder passwordEncoder; //회원 등록 @Transactional public void registerMember(MemberRegiDTO memberRegiDTO) { String name = memberRegiDTO.getName(); String passwor..
2023.10.17 -
필드 Null 체크 없애기, Optional<String> vs String?
최근 게시판 프로젝트로 끝까지 한번 해보자 라는 프로젝트를 진행하고 있던 와중,참 거슬리는 코드가 눈에 들어왔다.저게 틀린 코드라고 생각하지는 않았기에 저렇게 적었다만은,뭐랄까 참 지저분해 보이는 코드라서 리팩토링 욕구(?)가 솟았다. 그래서 어떻게 할까 고민을 하던 와중 먼저저 코드의 의미, 기능을 생각해보니 다음과 같았다. MemberUpdateDTO 의 Null 이 아닌 필드들만 DB에 업데이트 하기! 즉 필드의 null 체크를 좀 더 야무지게 할 수 있는 방법을 찾으면 됐다.그러다 Java 8 부터 도입된 Optional 을 사용하면 훨씬 더 안전하고,Java 표준 스펙에 의거한 코드를 만들 수 있지 않을 까 생각했다. 그래서 MemberUpdateDTO 의 null 이 올수 있는 필드를 Opti..
2023.10.13 -
[Querydsl] java.lang.IllegalArgumentException: No sources given
실전! Querydsl - 인프런 | 강의 Querydsl의 기초부터 실무 활용까지, 한번에 해결해보세요!, 복잡한 쿼리, 동적 쿼리는 이제 안녕! Querydsl로 자바 백엔드 기술을 단단하게. 🚩 본 강의는 로드맵 과정입니다. 본 강의는 자바 백엔 www.inflearn.com 실행 환경 (build.gradle) buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'java' id 'org.springframework.boot' version '2.7.12' id 'io.spring.dependency-management' version '1.0.15.RELEASE' // querydsl 추가 id 'com.ewerk.gradle.plug..
2023.09.13 -
영한갓님 JPA 실전 강의 들었는 데 CQS, CQRS 안다, 모른다?
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 - 인프런 | 강의스프링 부트와 JPA를 활용해서 API를 개발합니다. 그리고 JPA 극한의 성능 최적화 방법을 학습할 수 있습니다., 스프링 부트, 실무에서 잘 쓰고 싶다면? 복잡한 문제까지 해결하는 힘을 길러보세요www.inflearn.com영한갓님의 강의에서 회원의 정보를 수정하기 위해MemberService에 update 메서드를 추가하던 와중이었습니다."update 메서드는 엔티티를 바꾸겠다는 변경성 메서드인데, 이 메서드의 return type 을 Member로 한다면 update로 조회를 하는 꼴이 돼요.command와 query 가 같이 있는 꼴이 되죠.그래서 저는 update 메서드의 return type을 void로 하거..
2023.09.11