
[JPA] Cascade(영속성 전이)에 관해
2022. 11. 27. 00:01
스프링/JPA
Cascade JPA에서는 엔티티끼리 다대일, 일대일 등의 연관관계를 맺어줄 수 있다. [학생 - 학급] 테이블이 양방향 다대일 관계를 이루고 있다고 가정해보자. 만약, 학급을 만들면서 이 학급에 속하는 학생들을 만들고 싶다면 보통의 경우 아래 순서로 이루어질 것이다. 1. 학급 테이블 생성 및 값 세팅 2. 학생 테이블 생성 및 값 세팅 3. 학급 테이블의 학생 속성에 학생 객체를 리스트로 저장 4. 학급 테이블 저장 5. 학생 테이블의 학급 속성에 학급 객체를 저장 6. 학생 테이블 저장 3번 과정에 주목하자. 여기서 우리는 이미 학급 클래스에 학생 객체를 저장한 상태이다. 이것은 학생의 입장에서 자신에게 학급이 배정되었다고도 말할 수 있다. 하지만 엄밀히 따지면 학생 클래스에는 학급 객체가 저장되지..

[Spring Data JPA] NamedQuery 사용하기
2022. 9. 19. 20:47
스프링/JPA
NamedQuery Spring Data Jpa는 기본적으로 findAll, saveAll과 같이 CRUD를 포함한 기본적인 공통 메서드를 인터페이스로 제공한다. 그런데 만약, 단순히 전체 값을 조회하거나 키 값을 기준으로 조회하는 것 외에 특성 조건에 따른 값을 조회하고자 한다면 어떻게 해야할까? 물론 엔티티 매니저가 제공하는 createQuery 메서드를 사용해 JPQL문으로 DB에서 값을 조회할 수 있다. 하지만 만약 JPQL문의 컬럼명이 잘못 되었어도 해당 메서드를 호출하기 전에는 에러가 발생하지 않아 알아차리기 힘들다. 메서드 이름으로 쿼리를 생성해주기도 하지만, 조건이 많아질수록 메서드 이름이 길어진다는 단점이 있다. (findByAgeLessThan, findByUserNameAndAgeGr..

[JPA] 일대다 연관 관계 매핑
2022. 9. 13. 20:30
스프링/JPA
Entity 일대다 연관 관계 매핑 읽기 전에 참고하면 좋은 글 더보기 https://imcoding.tistory.com/56 [JPA] 엔티티 연관관계의 주인 연관관계의 주인 개념 외래키를 관리할 객체를 말한다. 엔티티의 연관관계는 테이블에서와 객체에서 각각 존재한다. 테이블에서는 사실 연관관계의 주인이 누구건간에 테이블 구조는 똑같다. imcoding.tistory.com https://imcoding.tistory.com/57 [JPA] 다대일 연관 관계 매핑 Entity 다대일 연관 관계 매핑 연관관계의 주인? 연관관계의 주인에 대한 개념이 없다면 아래 글을 먼저 읽고 오시길 권장드립니다. https://imcoding.tistory.com/56 [JPA] 엔티티 연관관계의 주인 연관관계 imc..

[JPA] 다대일 연관 관계 매핑
2022. 9. 13. 18:27
스프링/JPA
Entity 다대일 연관 관계 매핑 연관관계의 주인? 연관관계의 주인에 대한 개념이 없다면 아래 글을 먼저 읽고 오시길 권장드립니다. https://imcoding.tistory.com/56 [JPA] 엔티티 연관관계의 주인 연관관계의 주인 개념 외래키를 관리할 객체를 말한다. 엔티티의 연관관계는 테이블에서와 객체에서 각각 존재한다. 테이블에서는 사실 연관관계의 주인이 누구건간에 테이블 구조는 똑같다. imcoding.tistory.com 다대일(N : 1) 연관 관계 매핑 1. 멤버와 팀이 N : 1 관계로 있다. 2. 멤버는 하나의 팀에만 소속될 수 있고, 한 팀당 여러명의 멤버가 있을 수 있다. 이해를 돕기 위해 위 구조를 가지고 설명을 시작하겠다. 우선, 외래키는 멤버(N) 테이블에 존재한다. (..

[JPA] 엔티티 연관관계의 주인
2022. 9. 13. 18:26
스프링/JPA
Entity 연관관계의 주인 개념 외래키를 관리할 객체를 말한다. 엔티티의 연관관계는 테이블에서와 객체에서 각각 존재한다. 테이블에서는 사실 연관관계의 주인이 누구건간에 테이블 구조는 똑같다. 두 테이블 중 외래키를 갖고 있는 곳은 한 곳이며, 이 외래키 하나로 양쪽 테이블이 서로 조인하여 데이터를 가져올 수 있다. 하지만, 객체에서는 다르다. 두 테이블 A와 B가 N : 1로 연관관계가 매핑되어 있다면 A에는 B를 객체로 생성할 수 있고, B에서도 A를 List에 넣어 관리할 수 있다. 1 : 1 혹은 N : N으로 매핑되어 있다고 가정해도, 동일하게 양 쪽 모두에서 서로를 객체로 생성하여 관리할 수 있다. 이런 차이 때문에 두 객체 중 한 곳에서 외래키를 관리할 수 있도록 연관관계의 주인을 정해줘야 ..

[JPA] @MappedSuperclass 핵심 개념
2022. 9. 9. 20:25
스프링/JPA
MappedSuperclass 개념 핵심부터 말하자면, 객체는 상속관계에 있으나 테이블은 상속관계 매핑이 아닐 때 사용한다. 논리적으로 상속 관계에 있는 엔티티 클래스 간에 매핑 관계를 만드는게 아니라, 단순히 공통된 매핑 컬럼을 하나의 부모 객체 안에 몰아넣고자 할 때 사용하는 어노테이션이다. Member와 Seller 테이블이 있다. 이 두 테이블은 공통적으로 id와 name을 공통 속성으로 갖는다. 우리는 이 두 속성을 부모 객체에 할당하고자 하는거다. 지금은 두 테이블밖에 없지만 만약 테이블이 수십개가 넘어간다고 가정해보자. 그리고 공통된 속성은 id와 name에서 그치는 것이 아니라 등록일자, 수정일자, 등록한 사람, 수정한 사람 등등 점점 늘어난다고 가정하자. 그때마다 모든 엔티티 클래스에 가..

[JPA] @Entity / @Table / @Column / @Id 간단 개념만
2022. 8. 7. 19:58
스프링/JPA
import javax.persistence.*; @Entity @Table(name = "Account_Table") public class Account { @Id private Long id; @Column(name = "account_number") private String accountNumber; } @Entity 클래스를 엔티티로 설정한다. 즉, DB의 테이블로 간주한다. 해당 클래스 내에 선언된 객체들은 테이블에서 필드를 의미한다. 테이블 이름은 클래스명이 디폴트값이다. @Table 클래스 명과 다른 이름으로 테이블 이름을 지정할 수 있다. @Id 테이블의 primary key 컬럼으로 지정한다. @Column 객체명과 다른 이름으로 필드명을 지정할 수 있다. 괄호 안에 다음과 같은 것들..