Spring/jpa 17

[JPA] 리포지토리 관련 어노테이션

1. @Query 1) 개념 리포지토리 메소드에 직접 쿼리를 정의하고 싶을 때 사용 2) 속성 nativeQuery 네이티브 sql을 사용하고 싶을 때 해당 속성을 true로 설정 2. @Param 1) 개념 sql을 직접 작성한 후 파라미터를 바인딩 할 때 사용 3. @Modifying 1) 개념 모든 데이터에 일괄적인 업데이트를 날려야 하는 경우 벌크성 수정 쿼리를 사용하는데 그때 사용 2) 속성 clearAutomatically 4. @Repository 1) 개념 JPA예외를 스프링이 추상화한 예외로 변환 5. @Transactional 1) 개념 서비스 계층에서 트랜잭션을 시작하지 않으면 리포지토리에서 트랜잭션을 시작하도록 함. 스프링 데이터 jpa가 제공하는 공통 인터페이스를 사용하면 데이터를..

Spring/jpa 2023.03.07

[JPA] JPA를 사용하는 다양한 방법

1. 순수 자바 환경에서 JPA 사용 엔티티 매니저 팩토리 생성 엔티티 매니저 생성 엔티티 매니저에서 트랜잭션 얻기 트랜잭션 실행 트랜잭션 안에서 로직 실행 트랜잭션 커밋 엔티티 매니저 종료 엔티티 매니저 팩토리 종료 2. 스프링이나 J2EE 컨테이너에서 JPA 사용 1) 사용법 컨테이너가 엔티티 매니저를 관리하고 제공해준다 엔티티 매니저 팩토리에서 엔티티 매니저를 직접 생성해서 사용하는 것이 아니라 컨테이너가 제공하는 엔티티 매니저를 사용해야 한다 @Repository public class MemberRepository{ @PersistenceContext // EntityManager em; public void save(Member member){ em.persist(member); } } 2) ..

Spring/jpa 2023.02.23

[JPA] 조인 테이블

1. 데이터베이스 테이블의 연관관계를 설계하는 방법 1) 조인 컬럼 사용(외래키) MEMBER LOCKER MEMBER_ID(PK) LOCKER_ID(PK) USERNAME NAME LOCKER_ID(FK, NULL 허용) 특징 외래 키에 null을 허용하는 선택적 비식별 관계 회원과 사물함을 조인할 때 외부 조인을 사용해야 한다. 내부 조인을 사용하면 사물함과 관계가 없는 회원은 조회되지 않는다. 회원과 사물함이 아주 가끔 관계를 맺는다면 외래 키 값 대부분이 null로 저장되는 단점이 있다. 2) 조인 테이블 사용(테이블 사용) MEMBER MEMBER_LOCKER LOCKER MEMBER_ID(PK) MEMBER_ID(FK) LOCKER_ID(PK) USERNAME LOCKER_ID(FK) NAME..

Spring/jpa 2023.02.21

[JPA] 복합키와 식별 관계 매핑

1. 식별 관계 1) 개념 부모 테이블의 기본 키를 내려받아서 자식 테이블의 기본 키 + 외래 키로 사용하는 관계 2) 단점 식별 관계는 부모 테이블의 기본 키를 자식 테이블로 전파하면서 자식 테이블의 기본 키 컬럼이 늘어난다. 이 때문에 조인할 때 sql이 복잡해지고 기본 키 인덱스가 불필요하게 커질 수 있다. 식별 관계는 2개 이상의 컬럼을 합해서 복합 기본 키를 만들어야 하는 경우가 많다 식별 관계를 사용할 때 기본 키로 비즈니스 의미가 있는 자연 키 컬럼을 조합하는 경우가 많다. 그런데, 비즈니스 요구 사항이 시간이 지나면서 변할 수도 있다. 이 경우에 식별 관계의 자연 키 컬럼들이 자식에 손자까지 전파되면 변경이 힘들어지고, 전체적으로 관리도 어려워진다. 부모 테이블의 기본 키를 자식 테이블의 ..

Spring/jpa 2023.02.16

[JPA] 고급 매핑 관련 어노테이션

상속 관련 1. @Inheritance 1) 개념 상속 해 줄 부모 클래스에게 적용하는 어노테이션 2) 속성 strategy InheritanceType.JOINED 조인 전략: 자식 각각을 모두 테이블로 만들고 조회할 때 조인 사용 InheritanceType.SINGLE_TABLE 단일 테이블 전략: 테이블을 하나만 사용해서 통합 InheritanceType.TABLE_PER_CLASS 구현 클래스마다 테이블 전략: 서브 타입마다 하나의 테이블을 만든다 2. @DiscriminatorColumn 1) 개념 부모 클래스에 구분 컬럼 지정. 이 컬럼으로 자식 구분. 2) 속성 name 구분 컬럼의 이름 3. @DiscriminatorValue 1) 개념 엔티티를 저장할 때 구분 컬럼에 입력할 값을 지정 ..

Spring/jpa 2023.02.16

[JPA] 상속 관계 매핑, MappedSuperClass

1. 상속 관계 매핑 1) 개념 ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데베의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 2) 방법 조인 전략 개념 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본키 + 외래 키로 사용하는 전략 ITEM ITEM_ID(PK) NAME PRICE DTYPE ALBUM MOVIE BOOK ITEM_ID(PK, FK) ITEM_ID(PK, FK) ITEM_ID(PK, FK) ARTIST DIRECTOR AUTHOR ACTOR ISBN @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "dtype") public abstr..

Spring/jpa 2023.02.16

[JPA] 다대일, 일대다, 일대일, 대다대

1. 연관관계 매핑할 때 고려해야 할 것 1) 다중성 다중성 종류 다대일 일대다 일대일 다대다 2) 단방향, 양방향 두 엔티티 중 한쪽만 참조하는 단방향 관계인지, 서로 참조하는 양방향 관계인지 3) 연관관계의 주인 양방향 관계면 연관관계의 주인을 정해야 한다 전제 조건: 다중성은 왼쪽을 연관관계의 주인으로 정했다. 예를 들어 일대다면 일 쪽이 연관관계의 주인인 것. 2. 다대일 1) 다대일 단방향 Member(다) Team(일) id id Team team name username MEMBER TEAM MEMBER_ID(PK) TEAM_ID(PK) TEAM_ID(FK) NAME USERNAME @Entity public class Member{ @Id @GeneratedValue @Column(name..

Spring/jpa 2023.02.14

[JPA] 연관관계 어노테이션

1. @ManyToOne 1) 개념 다대일 관계에서 사용 2) 속성 optional false로 설정하면 연관된 엔티티가 항상 있어야 한다 기본값: true fetch 글로벌 페치 전략을 설정한다 기본값: ManyToOne=FetchType.EAGER, OneToMany=FetchType.LAZY cascade 영속성 전이 기능을 사용한다 targetEntity 연관된 엔티티의 타입 정보를 설정한다 2. @JoinColumn 1) 개념 외래 키를 매핑할 때 사용 2) 속성 name 매핑할 외래 키 이름 기본값: 필드명_참조하는 테이블의 기본 키 컬럼명 referencedColumnName 외래 키가 참조하는 대상 테이블의 컬럼명 기본값: 참조하는 테이블의 기본 키 컬럼명 foreignKey(DDL) 외래..

Spring/jpa 2023.02.13

[JPA] 단방향 연관관계, 양방향 연관관계

1. 방향의 의미 1) 단방향 회원과 팀이 관계가 있을 때 회원 -> 팀, 팀 -> 회원 둘 중 한 쪽만 참조하는 것 2) 양방향 회원과 팀이 관계가 있을 때 회원 -> 팀, 팀 -> 회원 모두 서로 참조하는 것 3) 특징 객체 관계에만 존재하고 테이블 관계는 항상 양방향 2. 객체의 연관관계와 테이블의 연관관계 차이 1) 객체의 연관관계 특징 참조로 연관관계를 맺는다 연관된 데이터를 조회할 때 참조를 사용한다 참조를 통한 연관관계는 언제나 단방향이다 객체간에 연관관계를 양방향으로 만들고 싶으면 반대쪽에도 필드를 추가해서 참조를 보관해야 한다. 이렇게 양쪽에서 서로 참조하는 것을 양방향 연관관계라고 하지만 이것은 양방향 관계가 아니라 서로 다른 단방향 관계 2개다. 예시 Member Team id id ..

Spring/jpa 2023.02.13