BE/JPA

· BE/JPA
김영한님의 JPA 강의를 보다가 좋은 내용이 있어서 기록해둡니다. https://inf.run/Codk 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의 실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., - 강 www.inflearn.com JPA에서 데이터를 수정할 때 병합을 사용하거나 변경 감지를 사용하는 데, 이 두 방식의 차이를 알아보자. 우선, 수정을 하기 전에 '준영속 엔티티'라는 개념을 정확히 알고 있어야 한다. 준영속 엔티티 영속성 컨텍스트가 관리하지 않는 엔티티 즉, JPA 기능을 통해서 가져오지 않은 엔티티를 의미한다...
· BE/JPA
JPA는 엔티티를 가지고 알아서 테이블을 생성해주는 편리한 기능을 가지고 있습니다. 이 때, JPA는 기준을 가지고 엔티티의 이름, 변수 명을 변환합니다. ex) memberInfo → MEMBER_INFO 기준은 무엇이고, 이 기준을 바꿀 수 있는 방법에 대해서 알아보겠습니다. 1. JPA의 기본 생성 전략 1) 하이버네이트만 사용하는 경우 엔티티 명, 필드 명을 그대로 사용 ex) memberInfo → memberInfo 2) SpringBoot에서 지원하는 기본 전략 이 전략은 명시적으로 엔티티명, 컬럼명이 지정되지 않은 경우에 적용되는 전략 (@Table, @Column 어노테이션을 통해서 이름을 지정해준 경우엔 적용 X) .(점) → _ (언더바) ex) member.info → member_..
· BE/JPA
Spring Boot에서 JPA를 이용해 개발을 진행 시 로그에 쿼리들이 올라오는데, 이 때 쿼리 속 파라미터가 ?로 표시된다. 이 경우엔 크게 2가지 방법으로 파라미터를 알아낼 수 있다. 1) trace 설정 필자는 application.yml 기준이니 application.properties를 사용하는 경우 그에 맞게 작성하면 된다. (application.yml) logging: level: org.hibernate.SQL: debug org.hibernate.type: trace # JPA 쿼리의 파라미터가 표시되도록 (쿼리 뒤에 parameter를 알려줌) 적용 후) 2) 외부 라이브러리 사용 (p6spy) https://github.com/gavlyukovskiy/spring-boot-data..
· BE/JPA
안녕하세요. 이번 포스팅에서는 JPA의 기본 키 값을 자동 생성할 때 UUID 타입으로 생성하는 방법에 대해서 포스팅해보려고 합니다. 1. Long 타입(Auto_Increment / Sequence)가 아니라 UUID를 선택하는 이유? 1) 분산 DB 환경일 경우에, PK값이 중복되어 INSERT될 가능성이 있다. 2) PK값을 예측하기 쉽다. 물론, 단일 DB환경 + 데이터의 수가 적을 땐 Long 타입이 더욱 효율적이다. 2. UUID(Universally Unique Identifiers)란? 범용 고유 식별자(Universally Unique Identifiers) : 각 개체를 고유하게 식별 가능한 값 중복을 100% 방지해주는 것은 아니지만, 중복이 발생할 확률은 정말 상당히 낮은 확률이라고..
· BE/JPA
이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다. 1. 경로 표현식 .(점)을 찍어 객체 그래프를 탐색하는 것 SELECT m.username // 상태 필드 FROMMember m JOIN m.team t // 단일 값 연관 필드 JOIN m.orders o// 컬렉션 값 연관 필드 WHERE t.name = 'TEAM_A' 상태 필드(state field): 단순히 값을 저장하기 위한 필드(ex : m.username) 연관 필드(association field): 연관관계를 위한 필드 단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team) 컬렉션 값 연관 필드: @OneToMany, @ManyToMany..
· BE/JPA
이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다. 1. JPQL 소개 JPQL 은 객체 지향 쿼리 언어임. 따라서 테이블을 대상으로 쿼리를 날리는 것이 아닌 엔티티 객체를 대상으로 쿼리를 날려야함. JPQL은 SQL을 추상화해서 특정 DB에 의존하지 않음 작성한 JPQL은 결국 SQL로 변환됨 2. JPQL 문법 select m from Member as m where m.age > 18 (18살을 넘은 회원을 조회) 엔티티와 속성은 대소문자 구분 O JPQL 키워드는 대소문자 구분 X 엔티티 이름(@Entity)으로 사용해야함. 테이블 이름이 아님 별칭은 필수 (m) (as 생략 가능) TypeQuery : 반환 타입이 명확할 때 사용 Query :..
· BE/JPA
이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다. 1. JPA의 쿼리 JPA는 다양한 쿼리를 지원함 JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API, MyBatis, SpringJDBCTemplate 와 함께 사용 가능 기존 단건 조회 방법 EntityManager.find() 객체 그래프 탐색 ex) schoole.getClass().getStudent() JPA를 사용하면 엔티티 객체를 중심으로 개발하는데, 조회 할 때 어떻게 할 것인가. 조회할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 애플리케이션이 필요한 데이터만 DB에서 불러오려면 검색 조건이 포함된 SQL이 필요 2. JPQL JPA는 SQL을 추상화한..
· BE/JPA
이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다. 1. 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 2. 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있기 때문에 변경되면 추적이 불가능 1) 기본값 타입 생명주기를 엔티티에 의존 값 타입은 공유하면 안됨. ex) 자바 기본 타입(int, double), 래퍼 클래스(Integer, Long), String 2) 임베디드 타입 (복합 값 타입) 새로운 값 타입을 직접 정의할 수 있음 JPA는 임베디드 타입이라 함 주로 기본 값 타입을 모아 만들어서 복합 값 타입이라고도 불림 int, St..
멍목
'BE/JPA' 카테고리의 글 목록