본문 바로가기

JPA/자바 ORM 표준 JPA 프로그래밍 - 기본편9

[JPA] 양방향 연관관계와 연관관계의 주인 두 엔티티가 양방향 연관관계를 가져도, 테이블은 변하지 않습니다. 안녕하세요. JPA의 양방향 연관관계에와 연관관계의 주인 대해서 알아보겠습니다. 지난 게시글에서 단방향 연관관계를 매핑하고 CRUD를 수행하는 방법을 알아보았습니다. 이어지는 내용이니 관심있는 분들은 아래 게시글을 참고해주세요. HTML 삽입 미리보기할 수 없는 소스 양방향 연관관계 두 객체가 서로를 참조할 때, 양방향 연관관계라고 합니다. 두 객체가 서로의 정보를 찾는 코드가 많을 때, 양방향 연관관계를 갖게 설계하면 코드를 간결하게 사용할 수 있습니다. 아래 사진은 멤버 객체도 팀 객체를 참조하고, 팀 객체도 멤버 객체를 참조하는 경우입니다. 테이블은 외래 키 하나로 양방향으로 조회합니다. 객체가 단방향 연관관계를 가질 때도, 테이블은.. 2022. 2. 4.
[JPA] 단방향 연관관계 객체 연관관계와 테이블 연관관계를 매핑해봅시다. 객체의 참조와 테이블의 외래 키를 매핑하는 것입니다. 안녕하세요. 단방향 연관관계에 대해서 알아보겠습니다. JPA는 객체와 관계형 DB 두 기둥 위에 있는 기술이라고 말합니다. 객체와 관계형 DB를 이어주는 기술이기 때문입니다. 연관관계는 객체와 관계형 DB 모두에서 정말 중요합니다. 그러나 둘은 다릅니다. 아래 사진을 봅시다. 객체와 테이블의 연관관계 객체는 참조(주소)를 사용해서 관계를 맺습니다. 회원 객체는 Member.team 필드로 팀 객체와 연관관계를 맺습니다. 또한, 회원 객체와 팀 객체는 단방향 관계입니다. 단방향 관계는 회원 -> 팀, 팀 -> 회원 둘 중 한쪽만 참조하는 것을 의미합니다. 여기서는 회원 -> 팀으로 회원만 팀을 참조하고, .. 2022. 2. 4.
시퀀스 allocationSize 정리 시퀀스 allocationSize의 기본값은 왜 50일까요? 안녕하세요. DB 시퀀스의 allocationSize에 대해서 알아보겠습니다. 이 게시글은 아래 글을 작성하며 Sequence의 allocation에 대해 궁금해져서 작성하게 된 글입니다. JPA에서 시퀀스를 어떻게 다루는지 내용이 포함되어있으니 궁금하신 분은 아래 게시글을 참고해주세요. HTML 삽입 미리보기할 수 없는 소스 시퀀스의 allocationSize는 단어 그대로 할당해놓는 시퀀스의 크기입니다. 시퀀스를 보통 한 개만 할당할 것 같지만, allocationSize의 기본값이 50이라는 것에 주의해야 합니다. 한번 시퀀스를 호출할 때 50개씩 시퀀스를 할당해놓는다는 것입니다. 왜 이렇게 많이 할당해놓는지 궁금합니다. 엔티티를 영속성 .. 2022. 2. 4.
[JPA] 기본 키 매핑 안녕하세요. 기본 키 매핑을 알아보겠습니다. 지난 게시글에서 엔티티를 테이블에, 필드를 컬럼에 매핑하는 방법을 알아보았습니다. 이어지는 내용이니 관심 있는 분들은 아래 게시글을 참고해주세요. HTML 삽입 미리보기할 수 없는 소스 기본 키 매핑 기본 키(PK, Primary Key)는 관계형 DB의 식별자입니다. 모든 엔티티는 고유의 기본 키를 가져야 합니다. JPA는 '@ID' 어노테이션으로 기본 키 매핑을 지원합니다. 기본 키로 사용할 필드에 @ID 어노테이션을 붙이면 됩니다. @Entity public class Member { @Id private Long id; private String username; private Integer age; } @Id 어노테이션만 사용하면 영속성 컨텍스트에 p.. 2022. 2. 3.
[JPA] 엔티티 매핑 안녕하세요. 오늘은 엔티티와 테이블을 매핑하는 방법을 알아보겠습니다. 객체와 테이블 매핑 @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 붙여야 합니다. @Entity가 붙은 클래스는 JPA가 관리하고, 엔티티라고 부릅니다. 참고로 '엔티티'라는 단어는 @Entity가 붙어서 JPA가 관리하는 클래스를 의미하기도 하고, '엔티티 = 개체 = 레코드 = 행'으로 한 객체를 의미하기도 합니다[1][2]. 여기서는 전자의 JPA가 관리하는 클래스라는 의미로 사용하겠습니다. @Entity 적용 시 주의 사항은 아래와 같습니다. 1. 기본 생성자는 필수입니다. 파라미터가 없는 public 또는 protected 생성자가 필요합니다. 이유가 궁금해서 인프런의 질문 답변 게시판을 .. 2022. 2. 3.
[JPA] 영속성 컨텍스트의 특징과 장점 안녕하세요. 영속성 컨텍스트의 특징과 장점에 대해서 알아보겠습니다. 지난 게시글에서 JPA의 영속성 관리와 영속성 컨텍스트의 개념을 알아보았습니다. 궁금하신 분은 아래 게시글을 참고해주세요. HTML 삽입 미리보기할 수 없는 소스 영속성 컨텍스트는 '엔티티를 영구 저장하는 환경'이자 application과 DB 사이의 중간계층이며, 영속성 컨텍스트에 들어온 객체는 JPA에 의해 관리됨을 알아보았습니다. 영속성 컨텍스트의 특징을 더 알아보겠습니다. 영속성 컨텍스트의 특징 1. 영속성 컨텍스트와 식별자 값 영속성 컨텍스트는 엔티티를 식별자 값(@Id로 테이블의 기본 키와 매핑한 값)으로 구분합니다. 따라서 영속 상태의 객체는 반드시 식별자 값을 가져야 합니다. 예를 들어서 아래 코드를 수행해도 데이터가 DB.. 2022. 2. 3.
[JPA] 영속성 관리 안녕하세요. 오늘은 JPA의 영속성 관리에 대해서 알아보겠습니다. 지난 게시글에서 JPA로 CRUD 작업을 어떻게 하는지 알아보았습니다. 궁금하신 분은 아래 게시글을 참고해주세요. HTML 삽입 미리보기할 수 없는 소스 JPA의 수정은 신기하게 동작합니다. JPA에는 em.update()와 같은 기능이 없습니다. 자바 코드에서 객체의 필드 값을 수정하기만 하면 DB에 자동으로 변경된 데이터가 반영됩니다. 이것이 가능한 이유는 JPA의 영속성 관리 때문입니다. 영속은 영속성 컨텍스트에서 관리되는 상태를 의미합니다. 먼저 영속성 컨텍스트를 자세히 알아봅시다. 영속성 컨텍스트(Persistence Context) 영속성 컨텍스트는 JPA를 이해하는 데 가장 중요한 용어 중 하나입니다. 한국어로 번역하자면 엔티.. 2022. 2. 2.
JPA 기본 설정, JPA CRUD 기초 안녕하세요. 오늘은 JPA 기본 설정을 알아보고 JPA로 CRUD(등록, 조회, 수정, 삭제)를 해보겠습니다. JPA 기본 설정 JPA를 사용하기 위해서 두 개의 설정이 필요합니다. 1. 라이브러리 추가 - pom.xml 자바 프로젝트를 Maven으로 생성하면 pom.xml 파일이 생성됩니다. pom.xml 파일에 아래 코드를 추가합니다. 11 11 org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.200 javax.xml.bind jaxb-api 2.3.0 org.projectlombok lombok RELEASE compile dependencies의 윗부분까지는 기본 파일에 설정되어 있고, dependencies 부분을.. 2022. 2. 2.