반응형

JAVA/JPA 학습기록 24

[JPA] Spring Data JPA로 생성일자, 수정일자 컬럼을 간단히 추가하자

Spring Data JPA에는 Auditing 기능을 편하게 다룰 수 있도록 @CreatedDate, @LastModifiedDate 어노테이션을 제공해준다. 그리고 생성일자, 수정일자 컬럼은 웬만한 모든 도메인에 있으면 로깅 및 사용자 입장에서도 간편하다. 따라서 보통 BaseEntity라는 생성일자, 수정일자가 들어있는 상위 엔티티를 만들고 상속 구조를 이용하는 방법을 진행한다. 이번 포스팅에서는 이 방법에 대해 기록해보려 한다. 개발환경 Spring Boot 2 버전 Spring Data JPA lombok 프로덕션 코드 BaseEntity @EntityListeners(AuditingEntityListener.class) @MappedSuperclass @Getter abstract public..

[JPA] 양방향 연관관계에서 JPA 내부 작동 원리_영속성 컨텍스트의 이해

JPA 작동 원리를 이해하지 못해 영속성 컨텍스트의 흐름을 알지 못할 경우 발생할 수 있는 문제이다. 블로그에 따로 포스팅이 돼있지 않아서 JPA 스터디를 하는 겸 기록해보려고 한다. 들어가기 전에 스프링 환경에서 JPA ORM을 이용하고 있다. Member : Team이 N:1 양방향 연관관계를 가지고 있다. 'wooteco' 팀에 'kth990303'을 넣으려고 하는 예제를 이용할 것이다. 결론부터 말하자면? JPA의 내부 작동 흐름에 대해 이해하는 것이 정말 중요하다. (영속성 컨텍스트의 흐름에 대한 이해가 부족하면 문제 발생 확률이 높아지고, 문제 원인도 못찾을 수 있다.) 양방향 연관관계에서는 객체의 값을 INSERT할 때, 안전하게 두 객체 모두에게 반영해주자. 두 객체의 메서드를 사용하거나,..

[H2] 맥에서 H2 database 실행하기 (feat. zsh: permission denied: ./h2.sh)

인텔리제이 테스트 환경에서는 기본으로 h2를 제공해주기 때문에, H2 database를 직접적으로 설치할 일이 많을지는 모르겠다. 하지만 인생은 어떻게 될지 모르니 혹시나 해서 기록해두려 한다. 1. h2 database 접속 후 설치 아래 링크로 들어가자. https://www.h2database.com/ H2 Database Engine (redirect) H2 Database Engine Welcome to H2, the free SQL database. The main feature of H2 are: It is free to use for everybody, source code is included Written in Java, but also available as native executa..

[JPA] 자바 ORM 표준 JPA 프로그래밍 - 기본편 후기

인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 강좌를 완강한지는 약 3달정도 됐다. (2021.04. ~ 2021.08. 초반) 그럼에도 후기를 지금 쓰는 이유는 1회독할 때의 느낌과 2회독할 때의 느낌이 다르기도 했고, 1회독했을 때는 완전 초보자였었기 때문에 좀 더 공부한 후에 보다 객관적으로 후기를 남기고 싶었기 때문이다. (사실 지금도 초보자이지만 ㅎㅎ) https://www.inflearn.com/course/ORM-JPA-Basic# 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는..

[JPA] JPQL 조건식_ Case When, COALESCE

JPA 완강이 얼마 남지 않았다. JPQL 강의를 들으면 곧 완강할 듯 하다. 최근에 우리 학교의 소그룹 멤버들을 관리할 수 있는 홈페이지를 만들어보고 싶어 구조를 대략 짜봤는데, JPA가 필수불가결일 듯 하여 JPA 기본편, 그리고 활용1편까지 빠르게 완강하기 위해 JPA 강의를 열심히 듣고 있다. 여름방학이 끝나기 전까지 JPA 활용1편, 그리고 Spring MVC 1편 완강을 목표로 달리겠다. 아무튼 이번 시간엔 JPQL의 조건식이 생각보다 유용할 듯 하여 앞으로 잘 참고하기 위해 포스팅하려 한다. 또한, JPQL이 무엇인지 모른다면 이전의 JPQL 포스팅을 참고하면 더 도움이 될 듯하다. https://kth990303.tistory.com/70 [JPA] JPA에서 SQL 쿼리를 작성하는 방법_..

[JPA] JPA에서 SQL 쿼리를 작성하는 방법_ JPQL

김영한님의 스프링 MVC 1편 강좌를 수강하기 전에, JPA 기본편은 완강하고 들으려고 열심히 수강하고 있다. 블로그에 가볍게 기록해보려 한다. 출처: 자바 ORM 표준 JPA 프로그래밍 - 기본편 (인프런 김영한 강사님) JPA를 다루는데 SQL문을 알아야 하는 이유? JPA는 Entity 객체 단위로 개발하기 때문에 객체지향적 설계에 효과적이다. 조회, Create, Delete와 같은 단순 쿼리 작업 시에 굉장히 간단하고 효율적이다. em.persist, em.remove와 같은 메소드를 제공해주기 때문이다. JPA는 검색 시에도 테이블이 아닌 엔티티 객체를 대상으로 검색한다. 그러나 모든 데이터를 엔티티 객체로 변환하여 검색하는 것은 성능 이슈 등 여러가지 문제점으로 인해 불가능하므로 결국 Nat..

[JPA] 값 타입 컬렉션, 임베디드 타입

만약 객체가 다른 객체의 테이블을 참조할 필요는 없는데, 해당 객체가 여러 가지 값을 가지고 있어야 하는 경우는 어떻게 할까? 예를 들자면, kth990303 학생과 aru0504 학생이 있다고 하자. kth990303과 aru0504는 같이 점심을 먹기로 했다. 그러기 위해선 아래 두 가지를 알아야 한다. kth990303과 aru0504는 각각 언제, 어디서 점심을 먹을지 kth990303과 aru0504는 점심으로 무엇을 먹기를 선호하는지 1번을 해결하기 위해서는 각각 일하는 장소와 시간대를 알아야할 것이다. 그러기 위해선 두 객체(Member 객체)에 이 정보들이 있어야할 것이다. 여기서 임베디드 타입이 사용된다. 2번을 해결하기 위해서는 둘이 의견을 통일하여 점심 메뉴를 골라야 한다. 그러나 둘..

[JPA] CascadeType.ALL 상태에서의 SQL ERROR: 23503

SQL Error: 23503 에러가 발생했다. 이 에러는 무엇인지 모르겠어서 현재 QNA에 글을 남겨둔 상태이다. https://www.inflearn.com/questions/213911 [SQL Error: 23503] Cascade 설정 후 Parent remove할 때 질문입니다. - 인프런 | 질문 & 답변 안녕하세요! 이전 질문에서 영한님 답변을 받고 원인을 해결하여 다른 경우 또한 테스트해보고 있는데 SQL Error: 23503 에러가 발생했고, 구글링 결과 참조 키 제약조건 위배될 때 발생하는 에러라 www.inflearn.com (21.05.17 추가) CascadeType.ALL, orphanRemoval=false 로 설정해두다보니, parent의 자식 목록에서 child1은 지웠..

[JPA] 실전예제 5_ 영속성 전이(Cascade), 고아 객체(orphanRemoval=true) 적용

실전예제 5 는 연관관계를 관리하는 방법에 대해 배운 내용을 적용하는 예제이다. 그 방법에는 아래와 같은 내용이 있다. 프록시(Proxy)를 이용하는 지연로딩(fetch = FetchType.LAZY) 적용 영속성 전이(cascade=CascadeType.ALL)와 고아객체 (orphanRemoval) 적용 (이번 포스팅) 첫번째인 지연로딩에 대한 포스팅은 아래 글에서 볼 수 있다. https://kth990303.tistory.com/53 [JPA] 실전예제 5_지연로딩(FetchType.lazy) 적용 오랜만에 올리는 JPA 포스팅이다. 지연로딩과 Cascade에 관한 내용을 자꾸 까먹어 나중에 복습용으로 보기 위해 포스팅으로 올린다. 인프런 김영한님의 강의를 듣고 스스로 요약 및 복습용으로 기 kt..

[JPA] 실전예제 5_지연로딩(FetchType.lazy) 적용

오랜만에 올리는 JPA 포스팅이다. 지연로딩과 Cascade에 관한 내용을 자꾸 까먹어 나중에 복습용으로 보기 위해 포스팅으로 올린다. 인프런 김영한님의 강의를 듣고 스스로 요약 및 복습용으로 기록한 포스팅입니다. 틀린 내용은 댓글로 피드백 부탁드립니다 :) 실전예제 5 는 연관관계를 관리하는 방법에 대해 배운 내용을 적용하는 예제이다. 그 방법에는 아래와 같은 내용이 있다. 프록시(Proxy)를 이용하는 지연로딩(fetch = FetchType.LAZY) 적용 (이번 포스팅) 영속성 전이(cascade=CascadeType.ALL) 적용 이번에는 그 중 첫번째인 지연로딩에 대해 공부해보려 한다. 프록시에 대한 내용은 아래 블로그에서 볼 수 있다. (기본 내용으로 보기 좋은 포스팅) https://ict..

반응형