본문 바로가기

jpa4

자바 ORM 표준 JPA 프로그래밍 - 연관관계 매핑 JPA 를 사용하여 객체간의 연관관계를 설정해주면 테이블간의 연관관계를 매핑할 수 있다. 이 때, 단방향(한 쪽에서 참조) 과 양방향 (양쪽에서 참조) 이라는 방향성이 생기게 된다. 테이블과 객체는 관계맺은 상대를 탐색하는 방식에 있어서 차이를 보인다. 테이블은 외래키(fk) Join 을 이용하여 연관관계를 맺은 테이블을 탐색하지만 객체는 참조를 이용하여 연관관계를 맺은 객체를 탐색한다. 즉, 테이블은 한 쪽에서 외래키를 이용하여 탐색하며 이 외래키 단위 그대로 참조가 가능하기 때문에 양방향이라는 개념 자체가 존재하지 않는다. 따라서 이 패러다임의 차이를 극복하기 위해서 객체와 테이블간의 연관관계를 잘 성정해야 한다. 예를 들어보자. Team 이라는 테이블과 Member 라는 테이블이 존재한다. 테이블에.. 2023. 3. 30.
자바 ORM 표준 JPA 프로그래밍 - 기본키 1. 기본키 엔티티를 선언 할 때에는 기본키를 매핑해주어야 한다. 기본키란 Table 에서의 PK 를 의미하고 엔티티에서 기본키를 지정해주지 않으면 [ Entity does not have primary key ] 라는 오류를 발생시킨다. - 엔티티 선언 @Entity public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "TEAM_ID") private Long id; private String name; } 여기서 [@Id] 어노테이션이 테이블에서의 기본키를 매핑해준다. @Id 어노테이션만 사용하는 경우 -> 기본키를 직접 할당을 하겠다. @GeneratedValue 어노테이션을 같이 사용하는.. 2023. 3. 4.
자바 ORM 표준 JPA 프로그래밍 - 엔티티와 테이블 생성 JPA 에서는 엔티티라는 개념을 사용한다. 이는 '데이터 모델링에 사용되는 객체' 라고 이해하면 된다. - 엔티티 선언 JPA 에서 엔티티를 사용할 때는 @Entity 어노테이션을 통해 해당 클래스를 엔티티로 설정할 수 있다. @Entity public class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; private String name; } 위의 코드에서 Team 이라는 클래스는 @Entity 어노테이션을 통해 '이 객체는 데이터 모델링에 사용되는 객체야' 라고 말해주는 것이다. 엔티티에는 Id 가 필요하다. Id 는 식별자로 테이블에서의 기본키를 매핑해주는 것이다. 또한 @GeneratedValue 어노테이션은 생성.. 2023. 2. 15.
자바 ORM 표준 JPA 프로그래밍 - Flush Flush flush 는 '변기물을 내리다, 물로 씻어내다' 라는 뜻을 가진다. JPA 에서 이 의미를 사용하며 쿼리들을 모아서 날리는 작업을 flush 라고 한다. JPA에는 영속성 컨텍스트라는 1차캐시 개념이 존재한다. 우리가 객체를 생성하고 엔티티 매니저를 통해 영속화 하면 해당 객체는 영속성 컨텍스트에 저장된다. 아래 코드를 보자. em.persist(memberA);//memberA 영속 em.persist(memberB);//memberB 영속 em.persist(memberC);//memberC 영속 em.persist(memberD);//memberD 영속 em.persist(memberE);//memberE 영속 위 상황에서 영속할 때마다 쿼리를 날린다고 생각하면 em.persist(me.. 2023. 2. 8.