본문 바로가기

JPA/JPA18

[JPA] 상속 관계 매핑 1. 상속 관계 매핑 객체의 상속과 DB의 슈퍼타입 서브타입 관계를 매핑하는 것 관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입 관계(Super-Type Sub-Type Relationship)이라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변화 -> 구현 클래스마다 테이블 전략 2. 조인 전략 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략이다. 조회할 때 조인을 사용해야 한다. .. 2022. 1. 3.
[JPA] 연관관계 매핑 - 2 1. 다대일 (@ManyToOne) 다대일 관계의 반대 방향은 항상 일대다 관계고 일대다 관계의 반대 방향은 항상 다대일 관계이다. 데이터베이스 테이블의 일대다 관계에서 외래 키는 항상 다쪽에 있다. 따라서 양방향 관계에서 연관관계의 주인은 항상 다쪽이다. (1) 다대일 단방향 [N:1] @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String name; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } @Entity @Getter.. 2022. 1. 2.
[JPA] 연관관계 매핑 - 1 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 엔티티의 연관관계를 매핑할 때 다음 3가지를 고려해야 한다. 다중성 단방향, 양방향 연관관계의 주인 1. 단방향 연관관계 객체 연관관계 회원 객체는 Member.team 멤버 변수로 팀 객체와 연관관계를 맺는다. 회원 객체와 팀 객체는 단방향 관계다. Member.team 필드를 통해서 팀을 알 수 있지만 반대로 팀은 회원을 알 수 없다. member.getTeam() 가능, team.getMember()는 불가능 테이블 연관관계 회원 테이블은 TEAM_ID 외래 키로 팀 테이블과 연관관계를 맺는다. 회원 테이블과 팀 테이블은 양방향 관계이다. 회원 테이블의 TEAM_ID 외래 키를 통해서 회원과 팀을 조인할 수 있고 반대로 팀.. 2022. 1. 1.
[JPA] 엔티티 매핑 (Entity Mapping) 1. 객체와 테이블 매핑 (1) @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. @Entity가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 부른다. 속성 기능 기본값 name JPA에서 사용할 엔티티 이름을 지정한다. 보통 기본값인 클래스 이름을 사용한다. 설정하지 않으면 클래스 이름을 그대로 사용한다. * @Entity 적용 시 주의사항 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에는 final 사용할 수 없다. (2) @Table @Table은 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 .. 2021. 12. 31.
[JPA] 영속성 컨텍스트 (Persistence context) 엔티티를 영구 저장하는 환경 엔티티 매니저(Entity Manager)로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. em.persist(member); persist() 메소드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨택스트에 저장한다. 영속성 컨텍스트는 논리적인 개념이다. 영속성 컨텍스트는 엔티티 매니저를 생성할 때마다 하나씩 만들어진다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있고, 영속성 컨텍스트를 관리할 수 있다. 1. 엔티티의 생명 주기 (1) 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 Member member = new Member(); member.setId(1L); member.se.. 2021. 12. 29.
JPA 사용하기 (feat. Maven) 스프링 부트 없이 JPA를 설정하는 방법입니다. 1. 프로젝트 생성 (1) Maven project 생성 JAVA 11 사용 Maven 선택 groupId: jpa-basic artifactId: ex1-hello-jpa version: 1.00 (2) 라이브러리 추가 - pom.xml org.hibernate hibernate-entitymanager 5.3.13.Final com.h2database h2 1.4.199 javax.xml.bind jaxb-api 2.3.1 hibernate 5.3.13 버전 사용 JPA 표준과 하이버네이트를 포함하는 라이브러리 hibernate-entitymanager를 라이브러리로 지정하면 hibernate-core.jar hibernate-jpa-2.1-api.ja.. 2021. 12. 28.
반응형