JPA 18

[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

[스프링] controller 관련 어노테이션

1. @RestController 1) 개념 컨트롤러에서 뷰 대신 데이터를 반환하려면 @ResponseBody 어노테이션을 사용해서 json형태로 데이터를 반환할 수 있는데 @ResponseBody와 @Controller를 합쳐놓은 어노테이션 2. @RequestMapping 1) 개념 http request로 들어오는 url을 특정 controller 클래스나 메소드로 연결시키는 역할을 한다. 2) 속성 path url 지정 3. @PostMapping 1) 개념 POST 요청을 받아들여서 데이터를 작성 2) 속성 path url 지정 4. @RequestBody 1) 개념 http요청의 본문(body-json형태)이 객체로 변환되어서 매핑된 메소드 파라미터로 전달된다.

Spring/spring 2023.02.22

[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