본문 바로가기
반응형

All57

JPA - 양방향 연관관계와 연관관계 주인 - 1 양방향 매핑 양방향 매핑이란 아래의 사진과 같이 서로 다른 두객체가 서로를 참조하고 있는 형태이다. 객체 연관관계는 다음과 같다. 회원 ➡️ 팀 (team) 팀 ➡️ 회원 (members) 여기서 Team과 Member는 일대다 관계를 맺고 있어 List 컬렉션을 사용해준다. 위의 객체 관계를 테이블로 표현하면 아래와 같다. 데이터베이스에선 PK와 FK를 통해 일대다 관계 설정과 양방향 조회를 할 수 있다. 양방향 연관관계 매핑 이제 코드를 통해 실제로 JPA로 어떻게 양방향 관계를 맺는지 알아보자. Team.class @Entity public class Team { @Id @GeneratedValue @Clumn(name = "TEAM_ID") private Long id; private String.. 2022. 12. 14.
JPA - 기본키 매핑 JPA에서는 기본키의 값을 설정하는데 다양한 옵션을 제공한다. 먼저 기본키 매핑부터 진행해보자. 기본 키 매핑 방법 @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Id와 @GeneratedValue라는 어노테이션을 통해 기본키 매핑을 해줄 수 있다. 만약 기본키 값을 직접 할당해줄 경우 @Id만 사용하면 된다. 반대로 자동 생성을 원할 경우 @GeneratedValue를 사용하면 된다. @GeneratedValue을 사용할 경우 아래의 매핑전략을 활용할 수 있다. IDENTITY : 데이터베이스에 위임. (MYSQL) SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용. @SequenceGenerator 필요. (ORACLE.. 2022. 12. 13.
JPA - 플러시(Flush)란? JPA의 flush에 대해 알아보자. 플러시란 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 작업 Flush의 원리 보통 트랜잭션 Commit이 발생할때, flush가 동작한다. 이때, 쓰기지연 SQL저장소에 등록된 insert, update, delete query들이 전송된다. 여기서 중요한 점이, flush가 발생한 시점에 영속성 컨텍스트를 비우는게 아니라, 그대로 유지한채로 DB와 동기화를 하는 것이다. 따라서, 트랜잭션이라는 작업단위가 중요해지고 Commit직전에만 동기화하면 된다. Flush의 동작 구조 변경 감지 (Dirty Checking) 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송(등록, 수정, 삭제 query) Flush를.. 2022. 12. 1.
JPA - 영속성 컨텍스트란? JPA를 이해하는데 가장 중요한 용어인 영속성 컨텍스트에 대해 알아보자. 영속성컨텍스트란 엔티티를 영구 저장하는 환경 그렇다. 영속성 컨텍스트는 DB가 아닌, JPA의 EntityManager가 엔티티를 관리하는 형태이다. 여기서 영속성 컨텍스트에 저장하기 위해 비영속 상태의 객체를 만들어서 영속성 컨텍스트에 저장해보자! 먼저, 비영속상태란 엔티티객체를 생성하고 EntityManager에게 위임시켜놓지 않은 상태이다. // 비영속상태의 객체 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 여기서 EntityManager의 persist를 통해 영속성 컨텍스트에 저장할 수 있다. EntityManager em.. 2022. 11. 25.
반응형