JPA(26)
-
다양한 연관관계 매핑 (2)
일대일 [1:1] 일대일 관계는 양쪽이 서로 하나의 관계만 가진다. 예를 들어 회원은 하나의 사물함만 사용하고 사물함도 하나의 회원에 의해서만 사용된다. 일대일 관계는 다음과 같은 특징이 있다. 일대일 관계는 그 반대도 일대일 관계이다. 테이블 관계에서 일대다, 대대일은 항상 다(N)쪽이 외래 키를 가진다. 반면에 일대일 관계는 주 테이블이나 대상 테이블 둘 중 어느 곳이나 외래 키를 가질 수 있다. 테이블은 주 테이블이든 대상 테이블이든 외래 키 하나만 있으면 양쪽으로 조회할 수 있다. 따라서 일대일 관계는 주 테이블이나 대상 테이블 중에 누가 외래 키를 가질지 선택해야 한다. ▼ 주 테이블에 외래 키 주 테이블에 외래 키를 두고 대상 테이블을 참조한다. 외래 키를 객체 참조와 비슷하게 사용할 ..
2023.04.27 -
다양한 연관관계 매핑 (1)
다대일 다대일 관계의 반대 방향은 항상 일대다 관계고 일대다 관계의 반대방향은 항상 다대일 관계다. 데이터베이스 관계에서 외래키는 항상 다 쪽에 있고, 다쪽이 연관관계의 주인이다. 1. 다대일 단방향 [N:1] @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ///Getter, Setter... } @Entity public class Team { @Id @GenerateValue @Column(name = "TEAM_ID") pr..
2023.04.27 -
연관관계 매핑 기초
단방향 연관관계 연관관계 중에선 다대일(N:1) 단방향 관계를 가장 먼저 이해해야 한다. 회원과 팀의 관계를 통해 다대일 단방향 관계를 알아보자. · 회원과 팀이 있다. · 회원은 하나의 팀에만 소속될 수 있다. · 회원과 팀은 다대일 관계다. ▼ 객체 연관관계 회원 객체는 Member.team 필드(멤버변수)로 팀 객체와 연관관계를 맺는다. 회원 객체와 팀 객체는 단방향 관계다. 회원은 Member.team 필드를 통해서 팀을 알 수 있지만 반대로 팀은 회원을 알 수 없다. ▼ 테이블 연관관계 회원 테이블은 TEAM_ID 외래 키로 팀 테이블과 연관관계를 맺는다. 회원 테이블과 팀 테이블은 양방향 관계다. 회원 테이블의 TEAM_ID 외래 키를 통해서 회원과 팀을 조인할 수 있고 반대로 팀과 회..
2023.04.27 -
엔티티 매핑
JPA를 사용하는 데 가장 중요한 일은 엔티티와 테이블을 정확히 매핑하는 것이다. 다양한 매핑 어노테이션에 대해 알아본다. @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야한다. 속성 기능 기본값 name JPA클래스에서 사용할 엔티티 이름을 지정한다. 설정하지 않으면 클래스 이름을 그대로 사용한다. · final클래스, enum, interface, inner 클래스에는 사용할 수 없다. · 저장할 필드에 final을 사용하면 안된다. @Table @Table은 엔티티와 매핑 할 테이블을 지정한다. 속성 기능 기본값 name 매핑할 테이블 이름 엔티티 이름을 사용한다. catalog catalog 기능이 있는 데이터베이스에서 catalog를 매핑한..
2023.04.27 -
영속성 관리 (2)
플러시 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다. 변경 감지가 동작해서 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 수정된 엔티티는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다.(등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시 하는 방법은 3가지다. em.flush() 를 직접 호출한다. 트랜잭션 커밋 시 플러시가 자동 호출된다. JPQL 쿼리 실행 시 플러시가 자동 호출된다. em.persist(memberA); em.persist(memberB); em.persist(memberC); //중간에 JPQL 실행 query = em.createQuery("select m ..
2023.04.27 -
영속성 관리 (1)
JPA가 제공하는 기능 ·엔티티와 테이블을 매핑하는 설계 부분 ·매핑한 엔티티를 실제 사용하는 부분 이번 글에서는 매핑한 엔티티를 엔티티 매니저를 통해 어떻게 사용하는지 알아보겠다. 엔티티매니저는 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 한다. 이름 그대로 엔티티를 관리하는 관리자다. 개발자 입장에서 엔티티 매니저는 엔티티를 저장하는 가상의 데이터베이스로 생각하면 된다. 참고로 내용 중에 구현과 관련된 부분들은 하이버네이트를 기준으로 이야기할 것이고 다른 JPA구현체도 크게 다르지는 않을 것이다. 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다. Ent..
2023.04.27